删除HTML脚本标记是否会对其包含的JavaScript产生任何影响?

rob*_*obC 9 html javascript dom

从我的测试中可以看出,可以从DOM中删除脚本标记,而不会对其包含的JavaScript产生任何影响.
此测试通过执行部分破坏脚本DOM节点.即使这对脚本没有影响,count也会在从DOM中删除脚本标记1 为变量分配值.

<!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>
Run Code Online (Sandbox Code Playgroud)

用例是从主机站点安全地删除注入的第三方脚本元素.

Sea*_*ira 8

当内容#testCodeScriptTag正在执行时,它们已经从DOM中获取,加载到JavaScript引擎中并进行解析.根据HTML 5规范的要求, DOM中的文本不再以任何方式连接到执行代码:

1.按如下方式初始化脚本块的源:
...
如果脚本是内联的,并且脚本块的类型是基于文本的语言
元素的"已启动"标志最后一次设置时的文本IDL属性的值是脚本源.
...
4.使用脚本块的源,获取脚本的URL,脚本块的类型作为脚本语言以及脚本元素的Document的Window对象的脚本设置对象创建脚本.
...
注意:这是脚本编译和实际执行的地方.

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