我有一个模块,该模块需要执行document.write动作,以便在页面加载后打印横幅。
如果我使用老式的方法,则不会有任何问题。
横幅打印在div内。
<div id="banner">
<script> addAdvert() </script>
</div>
<script>
function addAdvert(){
srcScript = 'http://www.urltoscript.js';
document.write('<script type=\"text/javascript\" src=\"'+srcScript+'" ><\/script>');
}
</script>
但是,如果我使用require js模块尝试这种操作(类似此类):
addAvert: function() {
var srcScript = options.urltoScript
document.write('<script type=\"text/javascript\" src=\"'+srcScript+'" ><\/script>');
}
它执行document.write并渲染所有文档,仅在整个文档上打印横幅。
我尝试了这种替代方法:
addAvert: function() {
var srcScript = options.urltoScript
var bsa = document.createElement('script');
bsa.type = 'text/javascript';
bsa.async = true;
bsa.src = srcScript;
$("#banner").append(bsa);
}
最佳答案
根据您的评论判断,您尝试从虚构URL http://www.urltoscript.js
加载的脚本也使用document.write
。您应该将此脚本更改为不使用document.write
,或者应该放弃异步加载的想法,因为document.write
在异步调用时不能可靠地工作。
您尝试使用require([bsa.src])
(如注释中所述)时已经发现,无法从异步加载的脚本中调用document.write
。 (还请注意,除非另一端的源代码是AMD模块或您为其定义了require([bsa.src])
,否则仅执行shim
是行不通的。)
您第一次通过RequireJS进行加载的尝试没有产生关于异步加载document.write
的错误消息,因为加载它的script
元素本身并不是异步的。但是,它完全使您的页面空白。这是因为,如果在页面加载完成后调用document.write
,浏览器可能会隐式调用document.open
,这可能会使您的页面空白。
结果是您不能可靠地将document.write
与异步代码一起使用。
关于javascript - 使用RequireJS模块的“document.write”问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27290163/