我想以后的页面加载执行,像这样的东西加载某些脚本:
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;
虽然这个脚本似乎执行和下载“scriptSrc”和右body标签结束前添加它,它产生在控制台(铬)以下消息(而不是错误)
未能在“文档”执行“写”:这是不可能的,除非它被明确地打开写入到一个文件从一个异步加载外部脚本。
这是什么意思,甚至? 而且我应该做不同的东西吗? 即使我得到预期的行为吗?
一个异步加载脚本可能会运行后该文档已被完全解析和关闭。 因此,你不能使用document.write()
,从这样一个脚本(以及技术上可以,但你想要什么也不会做)。
您需要更换任何document.write()
通过创建DOM元素,然后将它们插入到与特定的父母与明确的DOM操作该脚本语句.appendChild()
或.insertBefore()
或设置.innerHTML
或某种机制直接的DOM操作类似。
例如,代替在直列脚本这种类型的代码:
<div id="container">
<script>
document.write('<span style="color:red;">Hello</span>');
</script>
</div>
你可以使用这个在动态加载脚本,以取代上述联脚本:
var container = document.getElementById("container");
var content = document.createElement("span");
content.style.color = "red";
content.innerHTML = "Hello";
container.appendChild(content);
或者,如果有在您需要的只是追加到,你可以简单地做这个容器中没有其他内容:
var container = document.getElementById("container");
container.innerHTML = '<span style="color:red;">Hello</span>';
有点迟到了,但KRUX创造了这个剧本,叫Postscribe 。 我们可以用这个来突破这个问题。
在这种情况下是有用的人我有同样的问题。 我通过jQuery带来页脚到网页。 内部的页脚是一些谷歌的脚本广告和重新定位。 我不得不从页脚移动这些脚本,并直接将它们放置在页面并清除通知。
文章来源: Execute write on doc: It isn't possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened.