我能在<script>标签内嵌套另一个<script>标签吗?

7
这是我的代码。当屏幕宽度小于1025时,我正在尝试停止运行外部js文件。
<script type="text/javascript">
var gdsize = 1025;          
if(window.innerWidth>=gdsize) {

    <script>
    window.cookieconsent_options = {"message":"\"Geek Dashboard uses cookies to make sure you get the best experience on our website.\" -","dismiss":"It's OK","learnMore":"More Details Here","link":"http://www.geekdashboard.com/cookies/","theme":"dark-bottom"};
    }
    </script>


</script>

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/1.0.9/cookieconsent.min.js"></script>

通常使用脚本标签(类型为text/javascript)将js嵌入标记中。标签本身不是有效的js,因此您不能嵌套脚本标签(除非在不透明上下文中,例如字符串)。 - Hunan Rostomyan
<script type="text/javascript"> var gdsize = 1025;
if(window.innerWidth>=gdsize) {
window.cookieconsent_options = {"message":"&quot;Geek Dashboard uses cookies to make sure you get the best experience on our website.&quot; -","dismiss":"It's OK","learnMore":"More Details Here","link":"http://www.geekdashboard.com/cookies/","theme":"dark-bottom"}; }
</script> <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/1.0.9/cookieconsent.min.js"></script>
- Vel
http://jsfiddle.net/024d498L/ - Vel
4个回答

15
<script type="text/x-jQuery-tmpl">
    var gdsize = 1025;          
    if(window.innerWidth>=gdsize) {

    <script type="text/javascript">
        <!-- Some javascript here -->
        window.cookieconsent_options = {"message":"\"Geek Dashboard uses cookies to make sure you get the best experience on our website.\" -","dismiss":"It's OK","learnMore":"More Details Here","link":"http://www.geekdashboard.com/cookies/","theme":"dark-bottom"};
        }
    {{html "</sc"+"ript>"}}
</script>

您可以使用{{html "</sc"+"ript>"}}代替</script>

说明 [更新]:

当您在引号(字面)字符串中使用</script> HTML标记时,标记被视为闭合标记而不是字符串的一部分。因此,您不能直接在脚本部分中使用</script>标记。

一个解决方法是转义</script>标记并/或拆分<script>标记:

var scriptEnd = "</scr" + "ipt>";
document.write(scriptEnd);

外部脚本元素的类型是什么解释? - nnnnnn
@Vikrant,你的代码对我没用。当我把那段代码放在我的wp_head()中时,在保存后它会重置主题设置。也许这是一个主题问题。 - Amar Ilindra
1
var scriptEnd = "<\scr" + "ipt>"; 应该是 var scriptEnd = "</scr" + "ipt>"; (您使用了反斜杠而不是正斜杠。)(同时感谢您的帮助!) - Omar Shishani

2

为什么要使用嵌套脚本来修改对象属性?

既然您已经在“脚本”中,可以通过更简单的方式解决:

<script type="text/javascript">
  var gdsize = 1025;          
  if(window.innerWidth>=gdsize) {

    window.cookieconsent_options = {"message":"\"Geek Dashboard uses cookies to make sure you get the best experience on our website.\" -","dismiss":"It's OK","learnMore":"More Details Here","link":"http://www.geekdashboard.com/cookies/","theme":"dark-bottom"};

  }    
</script>

0

我强制将SRC属性写入SCRIPT标签,类似的方式可以在SCRIPT标签中编写SCRIPT标签。这个脚本强制重新加载JS文件,每次加载页面时都会使用随机数版本号来防止缓存。它能够正常工作,成功加载JS文件:

    <div id="jsgenrandom"><script type="text/javascript"></script></div>
    
    <script type="text/javascript">
        var divjs = document.getElementById('jsgenrandom')
        var divjss = divjs.getElementsByTagName("SCRIPT")[0].src = "https://_route_/the_js.js?v="+ Math.floor(Math.random()*1000) + ""  
    </script>


0

使用JavaScript在SCRIPT标签内编写此解决方案。工作正常:

<div id="writeintoscript"><script type="text/javascript"></script></div>

<script type="text/javascript">
var writeintoscripts = document.getElementById('writeintoscript')
writeintoscripts.getElementsByTagName("SCRIPT")[0].innerHTML = "alert('WRITE INTO SCRIPT TAG WITH JAVASCRIPT')"
</script>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接