Javascript 通过DOM、insertAdjacentHTML或document.write向IFRAME添加脚本
我需要将脚本添加到沙盒IFRAME中,我试图避免使用Javascript 通过DOM、insertAdjacentHTML或document.write向IFRAME添加脚本,javascript,iframe,sandbox,Javascript,Iframe,Sandbox,我需要将脚本添加到沙盒IFRAME中,我试图避免使用文档。编写(请参见和),但DOM版本没有按顺序执行脚本。在下面的示例中,jQuery在执行内联脚本时尚未加载,而document.write版本首先加载jQuery,然后执行内联脚本 出于我的目的(确保在运行内嵌脚本之前加载所有前导库,请参阅)document.write可能是正确的方法(但DOM更好,只是没有按应有的方式工作),但我更希望在确保按顺序执行脚本标记的同时,尽可能允许异步下载 我有一种感觉,DOM方法确保了srced脚本标记的顺序
文档。编写(请参见和),但DOM版本没有按顺序执行脚本。在下面的示例中,jQuery在执行内联脚本时尚未加载,而document.write
版本首先加载jQuery,然后执行内联脚本
出于我的目的(确保在运行内嵌脚本之前加载所有前导库,请参阅)document.write
可能是正确的方法(但DOM更好,只是没有按应有的方式工作),但我更希望在确保按顺序执行脚本标记的同时,尽可能允许异步下载
我有一种感觉,DOM方法确保了src
ed脚本标记的顺序,但不保证内联标记的顺序。。。但是,如果有人能帮我得到一个能与DOM一起工作的版本,以预期的顺序执行脚本,那就太好了
还有。。。谁能给我解释一下为什么insertAdjacentHTML
版本根本不起作用
<html>
<head>
<title>Testing DOM -vs- document.write Script additions...</title>
<script>
var $sandboxWin,
$jQuery = document.createElement('script'),
$script = document.createElement('script'),
$head = document.head,
sType = "insert"
;
$head.insertAdjacentHTML('afterbegin', '<iframe id="neek" style="display:none;" sandbox="allow-scripts allow-same-origin"></iframe>');
$sandboxWin = document.getElementById("neek").contentWindow;
switch (sType) {
case "dom": {
$jQuery.type = "text/javascript";
$jQuery.src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js";
$sandboxWin.document.head.appendChild($jQuery);
$script.type = "text/javascript";
$script.text = "console.log('via appendChild:'); console.log($);"; //.innerHTML
$sandboxWin.document.head.appendChild($script);
break;
}
case "insert": {
$sandboxWin.document.head.insertAdjacentHTML('afterbegin', "<script src='jquery.min.js'><\/script>");
$sandboxWin.document.head.insertAdjacentHTML('afterbegin', "<script>console.log('via insertAdjacentHTML:'); console.log($);<\/script>");
break;
}
default : {
$sandboxWin.document.write(
"<script src='jquery.min.js'><\/script>" +
"<script>" +
"console.log('via document.write:'); console.log($);" +
"<\/script>"
);
$sandboxWin.document.close();
}
}
</script>
</head>
<body>
Testing DOM -vs- document.write Script additions...
</body>
</html>
正在测试DOM-vs-document.write脚本添加。。。
var$sandboxWin,
$jQuery=document.createElement('script'),
$script=document.createElement('script'),
$head=document.head,
sType=“插入”
;
$head.insertAdjacentHTML('afterbegin','');
$sandboxWin=document.getElementById(“neek”).contentWindow;
开关(sType){
案例“dom”:{
$jQuery.type=“text/javascript”;
$jQuery.src=”https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js";
$sandboxWin.document.head.appendChild($jQuery);
$script.type=“text/javascript”;
$script.text=“console.log('via appendChild:');console.log($);”;//.innerHTML
$sandboxWin.document.head.appendChild($script);
打破
}
案例“插入”:{
$sandboxWin.document.head.insertAdjacentHTML('afterbegin',“”);
$sandboxWin.document.head.insertAdjacentHTML('afterbegin',“console.log('via insertAdjacentHTML:');console.log($);”;
打破
}
默认值:{
$sandboxWin.document.write(
"" +
"" +
“console.log('通过document.write:');console.log($);”+
""
);
$sandboxWin.document.close();
}
}
正在测试DOM-vs-document.write脚本添加。。。