【发布时间】:2013-10-22 05:00:48
【问题描述】:
以下是有效的javascript吗?该变量是否可用于外部调用的脚本?
<script src="//blah">
var something = "";
</script>
背景:我在自动生成的分析代码(不是谷歌)中看到了这个,它真的让我很烦,所以想知道我是否可以解决这个问题,或者这个变量是否会被外部引用的脚本以某种方式使用。
【问题讨论】:
标签: javascript
以下是有效的javascript吗?该变量是否可用于外部调用的脚本?
<script src="//blah">
var something = "";
</script>
背景:我在自动生成的分析代码(不是谷歌)中看到了这个,它真的让我很烦,所以想知道我是否可以解决这个问题,或者这个变量是否会被外部引用的脚本以某种方式使用。
【问题讨论】:
标签: javascript
不,不是,如果您引用源代码,则脚本标记之间的代码将被忽略。 你可以这样做:
<script src="bla.js"></script>
<script>
var something = "";
</script>
【讨论】:
阅读本文,http://www.w3.org/TR/html4/interact/scripts.html#h-18.2.1
脚本可以在 SCRIPT 元素的内容中定义,也可以在外部文件中定义。如果没有设置 src 属性,用户代理必须将元素的内容解释为脚本。如果 src 有一个 URI 值,用户代理必须忽略元素的内容并通过 URI 检索脚本。注意charset属性是指src属性指定的脚本的字符编码;它与 SCRIPT 元素的内容无关。
【讨论】:
不,不可能直接执行您正在执行的操作。但是,您可以使用一个聪明的小技巧来启用它:http://ejohn.org/blog/degrading-script-tags/
考虑以下 HTML sn-p:
<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,以便脚本在全局范围内执行。
【讨论】:
只有在显式处理时才会执行。见:http://ejohn.org/blog/degrading-script-tags。具体来说:
我们可以通过一些测试来验证这两个事实:
测试 1:验证内部脚本没有被执行,即使一个 外部 src 已加载。
测试 2:验证内部脚本不是 执行,即使没有加载外部 src。
这些共同表明内部脚本永远不会加载,除非页面上的脚本采取措施来评估内联代码。
【讨论】: