我已经开发了一个渲染布局的JS库(类似于ASP.Net MVC中的Razor View Engine中的布局渲染)。为了显示最终结果,我通过调用document.write(...)
函数来替换整个文档。例如:
document.open()
document.write(renderedLayout)
document.close()
我之所以使用这种方法,是因为我需要替换所有由开发人员定义或从外部资源获取的脚本,以便在替换内容后立即运行和评估它们。也就是说,替换html
节点的内部HTML将失败。
我描述的方法可在Opera,Chrome和Firefox中使用,但是当我尝试在IE和Edge下对其进行测试时,它会失败,并且一旦调用write
方法,浏览器就不会显示任何内容。
我的测试表明,在调用write
之前,所有控制台输出都已接收,此后一切都消失了。
尽管有些人可能认为这可能是IE或Edge中的安全措施,可以通过更改其配置来解决,但我想知道如何使用纯JavaScript来解决它,以便我的解决方案可以在所有情况下使用主要浏览器。
我已经仔细地跟踪和测试了我的代码,并且我100%确信我在问题中附加的代码块导致了阻塞。
答案 0 :(得分:1)
document.write写入文档流,在关闭(加载)的文档上调用document.write会自动调用document.open,这将清除文档。
删除document.open()和document.close()可能会有所帮助。
下一次当您对编写的函数在浏览器上工作时感到困惑时, 打开控制台(使用ctrl + i或F12)-在控制台中,放置Javascript代码。
以下是您的参考:https://developer.mozilla.org/en-US/docs/Web/API/Document/write