# 如何在Discourse主题中放置javascript？

**URL:** https://meta.discourse.org/t/how-to-put-javascript-in-discourse-theme/246157
**Category:** Development
**Created:** [2022年十一月19日 20:49 UTC](https://meta.discourse.org/t/how-to-put-javascript-in-discourse-theme/246157 "2022-11-19T20:49:19Z")
**Posts on this page:** 14
**Page:** 1

<div class="post-metadata">

### Author: ![danielabc](https://avatars.discourse-cdn.com/v4/letter/d/b9e5f3/32.png) [@danielabc](https://meta.discourse.org/u/danielabc)
#### Post date: [2022年十一月19日 20:49 UTC](https://meta.discourse.org/t/how-to-put-javascript-in-discourse-theme/246157/1 "2022-11-19T20:49:20Z")

</div>

我找到了一个带有下雪效果的 JavaScript，我想知道是否可以将此脚本放入主题中？我尝试将其插入到我放置 CSS 的位置，但网站出错了，哈哈，是否有其他地方可以插入它，或者 Discourse 不接受这类脚本？

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [2022年十一月19日 20:52 UTC](https://meta.discourse.org/t/how-to-put-javascript-in-discourse-theme/246157/2 "2022-11-19T20:52:26Z")

</div>

您好，脚本标签应放在主题/组件的 **Head** 选项卡中。 🙂

 ![image](https://global.discourse-cdn.com/meta/original/4X/d/7/7/d77a6eb045659ad3bb1ab4b03693a08a384a97f5.png)

---

<div class="post-metadata">

### Author: ![danielabc](https://avatars.discourse-cdn.com/v4/letter/d/b9e5f3/32.png) [@danielabc](https://meta.discourse.org/u/danielabc)
#### Post date: [2022年十一月19日 20:56 UTC](https://meta.discourse.org/t/how-to-put-javascript-in-discourse-theme/246157/4 "2022-11-19T20:56:03Z")

</div>

可以将任何类型的 JavaScript 代码插入到 head 中吗？

当 HTML 代码与 CSS 结合时，我应该将其放在普通 CSS 还是组合 CSS 中？

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [2022年十一月19日 20:57 UTC](https://meta.discourse.org/t/how-to-put-javascript-in-discourse-theme/246157/5 "2022-11-19T20:57:56Z")

</div>

您能展示一下您想插入的代码，以便我们更好地理解您想实现的目标吗？

---

<div class="post-metadata">

### Author: ![danielabc](https://avatars.discourse-cdn.com/v4/letter/d/b9e5f3/32.png) [@danielabc](https://meta.discourse.org/u/danielabc)
#### Post date: [2022年十一月19日 21:00 UTC](https://meta.discourse.org/t/how-to-put-javascript-in-discourse-theme/246157/6 "2022-11-19T21:00:42Z")

</div>

html 是  
`<div></div>` 176 次  
CSS 是

```plaintext
body {
  height: 100vh;
  background: radial-gradient(ellipse at bottom, #1b2735 0%, #090a0f 100%);
  overflow: hidden;
  filter: drop-shadow(0 0 10px white);
}

@function random_range($min, $max) {
  $rand: random();
  $random_range: $min + floor($rand * (($max - $min) + 1));
  @return $random_range;
}

.snow {
  $total: 200;
  position: absolute;
  width: 10px;
  height: 10px;
  background: #fff;
  border-radius: 50%;

  @for $i from 1 through $total {
    $random-x: random(1000000) * 0.0001vw;
    $random-offset: random_range(-100000, 100000) * 0.0001vw;
    $random-x-end: $random-x + $random-offset;
    $random-x-end-yoyo: $random-x + ($random-offset / 2);
    $random-yoyo-time: random_range(30000, 80000) / 100000;
    $random-yoyo-y: $random-yoyo-time * 100vh;
    $random-scale: random(10000) * 0.0001;
    $fall-duration: random_range(10, 30) * 1s;
    $fall-delay: random(30) * -1s;

    &:nth-child(#{$i}) {
      opacity: random(10000) * 0.0001;
      transform: translate($random-x, -10px) scale($random-scale);
      animation: fall-#{$i} $fall-duration $fall-delay linear infinite;
    }

    @keyframes fall-#{$i} {
      #{percentage($random-yoyo-time)} {
        transform: translate($random-x-end, $random-yoyo-y) scale($random-scale);
      }

      to {
        transform: translate($random-x-end-yoyo, 100vh) scale($random-scale);
      }
    }
  }
}

```

---

<div class="post-metadata">

### Author: ![danielabc](https://avatars.discourse-cdn.com/v4/letter/d/b9e5f3/32.png) [@danielabc](https://meta.discourse.org/u/danielabc)
#### Post date: [2022年十一月19日 21:05 UTC](https://meta.discourse.org/t/how-to-put-javascript-in-discourse-theme/246157/7 "2022-11-19T21:05:15Z")

</div>

`\u003cscript src=\"https://sites.google.com/site/novoefeitoneve/home/novoefeitoneve/snowstorm.js\"\u003e\u003c/script\u003e`

我曾尝试使用此 JavaScript，但它不起作用

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [2022年十一月19日 22:24 UTC](https://meta.discourse.org/t/how-to-put-javascript-in-discourse-theme/246157/8 "2022-11-19T22:24:09Z")

</div>

我不建议链接外部javascript，除非你知道它的可靠性。如果远程脚本发生更改，可能会破坏您的论坛。

我建议您在管理员面板中创建一个新的主题组件。将其命名为“雪花效果”。

编辑这个新的主题组件。

1. 在“Head”选项卡中，将[javascript代码](https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxub3ZvZWZlaXRvbmV2ZXxneDozNzk3NWFkNTgxNTExNGFm)复制粘贴到一个`<script>` HTML标签中。

2. 在“CSS”选项卡中，粘贴CSS代码，去掉`body {`中的`height: 100vh;`部分。

3. 在“Footer”选项卡中，粘贴176次:grimacing: `<div></div>`。

4. 享受您的雪景。

 ![image](https://global.discourse-cdn.com/meta/original/4X/a/4/a/a4aadb28ddca3c1a85a0c5405215f4e102ef286b.jpeg)

⚠ 请注意，此效果是由某人在其自己的HTML环境中创建的，并非“开箱即用”的“Discourse兼容”，因此可能会在您的论坛上引起问题。

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [2022年十一月19日 22:28 UTC](https://meta.discourse.org/t/how-to-put-javascript-in-discourse-theme/246157/9 "2022-11-19T22:28:19Z")

</div>

您真的应该读读这个 @danielabc，如果您还没有读过的话：

> [@Developing Discourse Themes & Theme Components](https://meta.discourse.org/t/beginners-guide-to-developing-discourse-themes/93648):
>
> Discourse Themes and Theme Components can be used to customize the look, feel and functionality of Discourse’s frontend. This section of the developer guides aims to provide all the reference materials you need to develop simple themes for a single site, right up to complex open-source theme components. This introduction aims to provide a map of all the tools and APIs for theme development. If you prefer a step-by-step tutorial for theme development, jump straight to: Themes vs. Theme Compon…

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2022年十一月19日 22:29 UTC](https://meta.discourse.org/t/how-to-put-javascript-in-discourse-theme/246157/10 "2022-11-19T22:29:38Z")

</div>

您可以将此用作模型：[冬季雪景主题组件 ❄](https://meta.discourse.org/t/winter-snow-theme-component/135157)

---

<div class="post-metadata">

### Author: ![danielabc](https://avatars.discourse-cdn.com/v4/letter/d/b9e5f3/32.png) [@danielabc](https://meta.discourse.org/u/danielabc)
#### Post date: [2022年十一月19日 22:34 UTC](https://meta.discourse.org/t/how-to-put-javascript-in-discourse-theme/246157/11 "2022-11-19T22:34:42Z")

</div>

我发现了这个雪景效果，我很喜欢，但它只在桌面端有效，在移动端却无效，为什么？我需要在移动端激活什么才能让它生效吗？

```plaintext
<script>if(typeof jQuery=='undefined'){document.write('<'+'script');document.write(' language="javascript"');document.write(' type="text/javascript"');document.write(' src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">'+'');document.write('</'+'script'+'>')}</script><script>if(!image_urls){var image_urls=Array()}if(!flash_urls){var flash_urls=Array()}image_urls['rain1']="https://static.tumblr.com/wt4apym/gG6mxfzjz/lakeside_snowflake.png";image_urls['rain2']="https://static.tumblr.com/wt4apym/gG6mxfzjz/lakeside_snowflake.png";image_urls['rain3']="https://static.tumblr.com/wt4apym/gG6mxfzjz/lakeside_snowflake.png";image_urls['rain4']="https://static.tumblr.com/wt4apym/gG6mxfzjz/lakeside_snowflake.png";$(document).ready(function(){var c=$(window).width();var d=$(window).height();var e=function(a,b){return Math.round(a+(Math.random()*(b-a)))};var f=function(a){setTimeout(function(){a.css({left:e(0,c)+'px',top:'-30px',display:'block',opacity:'0.'+e(10,100)}).animate({top:(d-10)+'px'},e(7500,8000),function(){$(this).fadeOut('slow',function(){f(a)})})},e(1,8000))};$('<div></div>').attr('id','rainDiv')
.css({position:'fixed',width:(c-20)+'px',height:'1px',left:'0px',top:'-5px',display:'block'}).appendTo('body');for(var i=1;i<=20;i++){var g=$('<img/>').attr('src',image_urls['rain'+e(1,4)])
.css({position:'absolute',left:e(0,c)+'px',top:'-30px',display:'block',opacity:'0.'+e(10,100),'margin-left':0}).addClass('rainDrop').appendTo('#rainDiv');f(g);g=null};var h=0;var j=0;$(window).resize(function(){c=$(window).width();d=$(window).height()})});</script>
<script>if(typeof jQuery=='undefined'){document.write('<'+'script');document.write(' language="javascript"');document.write(' type="text/javascript"');document.write(' src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">'+'');document.write('</'+'script'+'>')}</script><script>$(document).ready(function(){var a=$('<img/>').attr({'src':'https://static.tumblr.com/wt4apym/gG6mxfzjz/lakeside_snowflake.png','border':0});$('<a></a>').css({position:'absolute',right:'0px',top:'22px','z-index':'90'}).attr({'href':'http://tutorialuntukblog.blogspot.com/2011/10/tutorial-kelopak-bunga-berguguran-di.html'}).append(a).appendTo('body')});</script>

```

---

<div class="post-metadata">

### Author: ![danielabc](https://avatars.discourse-cdn.com/v4/letter/d/b9e5f3/32.png) [@danielabc](https://meta.discourse.org/u/danielabc)
#### Post date: [2022年十一月19日 22:35 UTC](https://meta.discourse.org/t/how-to-put-javascript-in-discourse-theme/246157/12 "2022-11-19T22:35:35Z")

</div>

我会看看的，谢谢

---

<div class="post-metadata">

### Author: ![danielabc](https://avatars.discourse-cdn.com/v4/letter/d/b9e5f3/32.png) [@danielabc](https://meta.discourse.org/u/danielabc)
#### Post date: [2022年十一月19日 22:43 UTC](https://meta.discourse.org/t/how-to-put-javascript-in-discourse-theme/246157/13 "2022-11-19T22:43:04Z")

</div>

我安装了，但什么也没发生 ☹

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [2022年十一月20日 16:16 UTC](https://meta.discourse.org/t/how-to-put-javascript-in-discourse-theme/246157/14 "2022-11-20T16:16:10Z")

</div>

老实说，在网上随意找一个下雪效果并尝试让它在 Discourse 上运行并非易事。

Discourse 有其自身的限制，你想要包含在 Discourse 中的大多数 JavaScript 都需要修改和适应这些限制。

> [@Danielabc](#):
>
> 我安装了，但什么也没发生 ☹

我昨天试过了，目前的效果相当……微妙。肯定可以改进，但同样，这需要一些工作。

我也同意其他人的看法，如果你想为你的网站添加自定义（你似乎非常投入其中，并且经常阅读 Meta），你应该从头开始，理解 HTML、CSS 和 JavaScript 的基础知识。

我认为在这里获得关于此类自定义的免费帮助将是有限的。

---

<div class="post-metadata">

### Author: ![danielabc](https://avatars.discourse-cdn.com/v4/letter/d/b9e5f3/32.png) [@danielabc](https://meta.discourse.org/u/danielabc)
#### Post date: [2022年十一月20日 21:40 UTC](https://meta.discourse.org/t/how-to-put-javascript-in-discourse-theme/246157/16 "2022-11-20T21:40:59Z")

</div>

感谢您澄清我的疑虑，有一件事我没弄明白，那就是这些效果在桌面网站上有效，但在手机上却无效，这是为什么呢？？？
