2012-02-04 105 views

回答

8

由於該元素具有src屬性,因此未執行內容。這不是嚴格的法律。該HTML5 spec說:

如果有src屬性,元素必須是空的,或者含有也匹配腳本內容的限制僅腳本文件。

<script>元素的內容既不是有效的JSON也不是有效的JavaScript。它不是有效的JSON,因爲屬性名稱未被引用。它不是有效的JavaScript,因爲儘管它看起來像帶有標記語句的塊表達式,但startInNewWindow之後的冒號無法合法出現在那裏。

這就是說,一個被加載總是可以尋找最後一個腳本元素,並解析其內容的腳本:

var scripts = document.getElementsByTagName('SCRIPT'); 
var lastScript = scripts[script.length - 1]; 
var content = eval(lastScript.innerText || lastScript.textContent); 
+1

謝謝!相關:http://ejohn.org/blog/degrading-script-tags/ – user996015 2012-02-04 00:43:31

5

瀏覽器會忽略<script src />標籤的所有內容:

<script type="text/javascript" src="https://getfirebug.com/firebug-lite.js"> 
{ 
    overrideConsole: false, 
    startInNewWindow: true, 
    startOpened: true, 
    enableTrace: true 
} 
</script> 

我螢火蟲精簡版文檔在這裏注意到了這一點。

但是,Firebug Lite Javascript會專門找到它的<script>標籤並手動解析內容。

+0

很感謝。我想我找到了! http://code.google.com/p/fbug/source/browse/lite/branches/firebug1.5/build/firebug-lite-debug.js#478 – user996015 2012-02-04 00:16:28

1

這裏是疑問解析JSON對象的情況下,有人有興趣的代碼。

// process the Script JSON Options 
var innerOptions = FBL.trim(script.innerHTML); 
if (innerOptions) { 
    var innerOptionsObject = eval("(" + innerOptions + ")"); 

    for (var name in innerOptionsObject) { 
     var value = innerOptionsObject[name]; 

     if (name == "debug") { 
      Env.isDebugMode = !!value; 
     } 
     else if (name in Env.Options) { 
      Env.Options[name] = value; 
     } 
     else { 
      Env[name] = value; 
     } 
    } 
} 

http://code.google.com/p/fbug/source/browse/lite/branches/firebug1.5/build/firebug-lite-debug.js#478