2013-10-22 125 views
3

是以下有效的JavaScript?该变量是否可用于外部调用的脚本?脚本标记与src和脚本标记之间的代码

<script src="//blah"> 

var something = ""; 

</script> 

背景:我已经看到了汽车这个曾经产生解析的代码(不是谷歌),它真的让我很烦,所以想知道如果我能解决这个问题,或者如果这个变量会以某种方式由外部引用的脚本中使用。

回答

5

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

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

+0

谢谢你,我很欣赏每个人的反应,但是这个标准的链接是理想的。 – hireSwish

2

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

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

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

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

测试1:验证内部脚本不被执行,即使 外部SRC被加载。

测试2:验证内部脚本不是 已执行,即使未加载外部src也是如此。

总之这些都表明了内部脚本从未加载,除非网页上的脚本采取行动EVAL内嵌代码。

0

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