对文档的write()崩溃了Internet Explorer 11

时间:2014-12-19 22:19:22

标签: javascript internet-explorer crash internet-explorer-11

以下代码适用于chrome和Safari,但在IE11中崩溃了网站:

var doc = document.implementation.createHTMLDocument("");
doc.open("replace");
doc.write(document.querySelector("html").outerHTML);
doc.close()

我正在尝试做的是创建一个DOM的克隆(不加载脚本/图像等)来进行操作。知道为什么会崩溃IE吗?有一个更好的方法吗?我正在使用polyfill用于outerHTML(虽然我认为它在IE11中得到支持)并且可以确认outerHTML按预期工作。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

它似乎不是write()方法,它导致IE11崩溃,而是与close()相关。在类似问题上找到的最佳答案 Why won't this JavaScript (using document.open and document.write) work in Internet Explorer or Opera?发现不包括close()调用阻止IE崩溃。

我自己也有类似的问题:

var doc = document.implementation.createHTMLDocument('');
doc.open();
doc.write('<body><p>Hello world</p>');
doc.close(); // This is where it breaks

然而,如果没有打破页面,我实际上没有运气。我尝试将其添加到超时或仅在我完成DOM时关闭,但似乎都失败了。我想这是一个检测IE11并且没有调用close的情况。

if (!(window.ActiveXObject) && "ActiveXObject" in window) {
    // IE11, do nothing... may cause memory leaks...
} else {
    doc.close();
}

我只尝试过IE11,但它可能会在早期版本的IE中崩溃......在这种情况下使用

if ("ActiveXObject" in window) {
    // IE, do nothing... may cause memory leaks...
} else {
    doc.close();
}

希望这有助于任何遇到同样问题的人。