我有一个(部分)html文件,其中包含:


 < div id =“externalHTML”>
外部屏幕。& #xA;< / div>
< script id =“externalScript”type =“text / javascript”>
 function initScreen(){alert(“从外部脚本发出警报”); }
< / script>



 我想要的是将“externalScript”加载到其他一些html文件“parent”。 HTML”。首先,我尝试了这个:


 function loadScreen(){
 var xhr = new XMLHttpRequest();
 xhr.open('GET',“external.html”,true);
 //省略了不重要的细节
 //解析响应,以便我可以提取脚本并忽略div。
 var doc = new DOMParser()。parseFromString(this.responseText,'text / html');
 var extScript = doc.getElementById(“externalScript”);
 var extContainer = document.getElementById('extContainer');
 //将脚本添加到父DOM
 screenContainer.appendChild(extScript);
 };
 xhr.send();
 }



 此方法在父DOM中插入脚本元素,但不执行脚本。我发现通过这样做:


 ...
 //创建脚本的副本
 var scr2 = document.createElement (“script”);
 scr2.type =“text / javascript”;
 scr2.text = extScript.text;
 //将脚本添加到父DOM
 screenContainer.appendChild (scr2);
 ...



 脚本正确执行,我可以调用“initScreen()”函数。任何人都可以向我解释这里发生了什么?谢谢。

答案 0 :(得分:0)
只有半受过教育的答案,但我认为这与document
的{{1}}部分有关。它并不常见,但网页中可能包含多个文档 - 例如document.createElement
,iframe
甚至svg
文档。但是,您不能只是在这些文档之间自由复制节点;他们有自己的命名空间和附加行为。因此,正如您在修复程序中发现的那样,您需要在页面文档中创建匹配的MathML
,而不是使用外部<script>
中的节点。