2013-10-22 127 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,以便腳本在全局範圍內執行。