带有src的脚本标记和脚本标记之间的代码

时间:2013-10-22 05:00:49

标签: javascript

以下是有效的javascript吗?该变量是否可用于外部调用的脚本?

<script src="//blah">

var something = "";

</script>

背景:我已经看到这用于自动生成的分析代码(不是谷歌),它真的很烦我,所以想知道我是否可以解决这个问题,或者这个变量是否会以某种方式被外部引用的脚本使用。

4 个答案:

答案 0 :(得分:8)

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

  

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

答案 1 :(得分:3)

只有在显式处理时才会执行。见:http://ejohn.org/blog/degrading-script-tags。具体做法是:

  

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

     

测试1:验证内部脚本是否未执行,即使是   外部src已加载。

     

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

这些表明内部脚本从不加载,除非页面上的脚本采取行动来评估内联代码。

答案 2 :(得分:2)

不,不是,如果您引用源代码,则会忽略脚本标记之间的代码。 你可以这样做:

<script src="bla.js"></script>
<script>
var something = "";
</script>

答案 3 :(得分:1)

不,你不可能直接做你正在做的事情。但是,您可以使用一个聪明的小黑客来启用它: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,以便脚本在全局范围内执行。