2015-02-09 83 views
9

從我的測試中看來,腳本標記可以從DOM中刪除,而不會對其包含的JavaScript產生任何影響。
此測試通過執行部分方式破壞腳本DOM節點。即使這對腳本沒有影響,在之後,將變量count分配爲值1腳本標記已從DOM中移除。刪除HTML腳本標記是否對它包含的JavaScript有任何影響?

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<title> Test </title> 

<script id="jQueryScriptTag" src="https://code.jquery.com/jquery-1.11.2.min.js"></script> 

</head> 
<body> 

<button id="testBtn">Click to test</button> 

<div id="output"></div> 

<script id="testCodeScriptTag"> 
    var count; 

    $("#jQueryScriptTag").remove(); 
    $("#testCodeScriptTag").remove(); 
    $("#output").append(
     "<p>jQueryScriptTag is " + document.getElementById("jQueryScriptTag") + "</p>" + 
     "<p>testCodeScriptTag is " + document.getElementById("testCodeScriptTag") + "</p>" + 
     "<p>count is " + count + "</p>" 
    ); 

    count = 1; 

    $("#testBtn").click(function(){ 
     $("#output").append(
      "<p>count is " + (count++) + "</p>" 
     ); 
    }); 

</script> 

</body> 
</html> 

該用例安全地從宿主站點刪除注入的第三方腳本元素。

+6

當的JavaScript解析,它加入到全球範圍內(窗口對象)。所以元素只是一個文本容器。 – Mouser 2015-02-09 17:56:51

+0

一旦執行javascript,就不那麼簡單,只需刪除腳本以使其不執行即可 – adeneo 2015-02-09 18:02:11

回答

6

當的內容正在執行時,它們已經從DOM中取出,加載到JavaScript引擎中並被解析。在DOM中的文本不再連接到執行代碼的任何方式,as required by the HTML 5 specification

1.初始化腳本塊的來源如下:
...
如果腳本嵌入和the script block's type是基於文本的語言
元素的"already started"標誌上次設置時的文本IDL屬性的值是腳本源。
...
4.使用the script block's source(從中獲取腳本的URL,腳本塊的類型作爲腳本語言以及腳本元素的Document的Window對象的腳本設置對象)創建腳本。
...
注意:這是腳本編譯和實際執行的地方。

另請參見:http://www.w3.org/TR/html5/webappapis.html#creating-scripts

相關問題