以下代码适用于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按预期工作。
提前谢谢!
答案 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();
}
希望这有助于任何遇到同样问题的人。