Par*_*lia 66 javascript asynchronous onload document.write
我试图在页面加载执行后加载某个脚本,如下所示:
function downloadJSAtOnload(){
var element = document.createElement("script");
element.src = "scriptSrc";
document.body.appendChild(element);
}
if (window.addEventListener)
window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent)
window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;
Run Code Online (Sandbox Code Playgroud)
虽然这个脚本似乎执行并下载'scriptSrc',并在body标记结束之前附加它,但它在控制台(chrome)中产生以下消息(不是错误)
无法在'Document'上执行'write':除非明确打开,否则无法从异步加载的外部脚本写入文档.
这甚至意味着什么?我应该采取不同的做法吗?即使我得到了预期的行为?
jfr*_*d00 79
在完全解析和关闭文档之后,可能会运行异步加载的脚本.因此,你不能使用document.write()这样的脚本(技术上你可以,但它不会做你想要的).
您需要更换任何document.write()通过创建DOM元素,然后将它们插入到特定的父母在与明确的DOM操作该脚本语句.appendChild()或.insertBefore()或设置.innerHTML或某种机制直接DOM操作类似.
例如,而不是内联脚本中的此类代码:
<div id="container">
<script>
document.write('<span style="color:red;">Hello</span>');
</script>
</div>
Run Code Online (Sandbox Code Playgroud)
您可以使用它在动态加载的脚本中替换上面的内联脚本:
var container = document.getElementById("container");
var content = document.createElement("span");
content.style.color = "red";
content.innerHTML = "Hello";
container.appendChild(content);
Run Code Online (Sandbox Code Playgroud)
或者,如果容器中没有其他内容需要添加,您可以简单地执行此操作:
var container = document.getElementById("container");
container.innerHTML = '<span style="color:red;">Hello</span>';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112360 次 |
| 最近记录: |