删除HTML脚本标记会对它所包含的JavaScript产生任何影响吗

Does removing an HTML script tag have any affect on the JavaScript that it contains?

本文关键字:JavaScript 任何 影响 包含 脚本 HTML 删除      更新时间:2023-09-26

根据我的测试,脚本标记可以从DOM中删除,而不会对其包含的JavaScript产生任何影响
此测试在执行的过程中破坏了脚本DOM节点。即使这对脚本没有影响,在从DOM中移除脚本标记之后,变量count也会被分配值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>

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

在执行#testCodeScriptTag的内容时,它们已经从DOM中提取、加载到JavaScript引擎中并进行解析。DOM中的文本不再以任何方式连接到执行代码,这是HTML5规范所要求的:

1.初始化脚本块的源,如下所示:

如果脚本是内联的并且脚本块的类型是基于文本的语言
上次设置元素的"已启动"标志时文本IDL属性的值是脚本源

4.使用脚本块的源、从中获取脚本的URL、脚本块的类型作为脚本语言以及脚本元素的Document的Window对象的脚本设置对象来创建脚本

注意:这是编译和实际执行脚本的地方。

另请参阅:http://www.w3.org/TR/html5/webappapis.html#creating-脚本