带有src属性的脚本标签和在脚本标签之间的代码

7
以下的javascript代码是否有效?变量是否能够在外部调用的脚本中使用?
请注意,此处保留了HTML标签。
<script src="//blah">

var something = "";

</script>

背景:我看到它在自动生成的分析代码中被使用(不是谷歌),这真的很让我烦恼,所以想知道是否可以解决它,或者这个变量是否会被外部引用的脚本使用。

4个回答

10

阅读这个:http://www.w3.org/TR/html4/interact/scripts.html#h-18.2.1

脚本可以在SCRIPT元素的内容中定义,也可以放在外部文件中。如果src属性没有设置,则用户代理必须将元素的内容解释为脚本。如果src具有URI值,则用户代理必须忽略元素的内容并通过URI检索脚本。请注意,charset属性是指由src属性指定的脚本的字符编码;它不涉及SCRIPT元素的内容。


1
谢谢,我很感激大家的回复,但标准链接是理想选择。 - Freelance Developer Melbourne

3
不,如果您引用了源代码,则会忽略脚本标记之间的代码。 您可以按照以下方式实现:
<script src="bla.js"></script>
<script>
var something = "";
</script>

或者有一个脚本遍历每个脚本标签,如果设置了src,则评估内容。 - user985399

3
它只有在明确处理时才会执行。参见:http://ejohn.org/blog/degrading-script-tags。具体而言:

我们可以通过一些测试来验证这两个事实:

测试1:验证即使已加载外部src,也不会执行内部脚本。

测试2:验证即使没有加载外部src,也不会执行内部脚本。

综合起来表明,除非页面上的脚本采取行动对行内代码进行求值,否则内部脚本将永远不会被加载。

2
不,您不能直接执行您正在执行的操作。但是,有一个巧妙的小技巧可以实现它:http://ejohn.org/blog/degrading-script-tags/ 考虑以下HTML片段:
<script src="external.js">
    var something = "";
</script>

将以下代码添加到您的 external.js 文件末尾:
var scripts = document.getElementsByTagName("script");
var length = scripts.length;
var script = scripts[length - 1].innerHTML;
eval(script);

请注意,eval必须间接调用,以便在全局范围内执行脚本。

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