以下是有效的javascript吗?该变量是否可用于外部调用的脚本?
<script src="//blah">
var something = "";
</script>
背景:我已经看到这用于自动生成的分析代码(不是谷歌),它真的很烦我,所以想知道我是否可以解决这个问题,或者这个变量是否会以某种方式被外部引用的脚本使用。
答案 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
,以便脚本在全局范围内执行。