7

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

<script src="//blah">

var something = "";

</script>

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

4

4 回答 4

9

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

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

于 2013-10-22T05:10:38.527 回答
3

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

<script src="bla.js"></script>
<script>
var something = "";
</script>
于 2013-10-22T05:07:16.230 回答
3

它仅在显式处理时执行。请参阅:http ://ejohn.org/blog/degrading-script-tags 。具体来说:

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

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

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

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

于 2013-10-22T05:10:36.140 回答
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必须间接调用,以便脚本在全局范围内执行。

于 2013-10-22T05:22:31.300 回答