document.write在IE和Edge下不起作用

时间:2018-11-01 10:17:35

标签: javascript

我已经开发了一个渲染布局的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%确信我在问题中附加的代码块导致了阻塞。

1 个答案:

答案 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