我需要将一个 html 字符串写入一个元素,然后从该元素读取生成的外部 html。我需要它在 IE10、最新的 FF、Chrome、Safari、Android、iOS Safari 中工作,但在任何较旧的浏览器中都不需要。在所有非 ie 浏览器中,以下简单方法都有效:
var html = WIUI.createElement('html');
html.innerHTML = htmlString;
console.log(html.outerHTML);
但是在 IE10 中,上述方法以一种不可接受的方式失败。不知何故,html元素有一个与父文档匹配的body标签,(不是我给它的html字符串!!!我认为这是浏览器本身的一个疯狂错误)。您可以在此处查看此错误:https ://mod.it/iuu_1DcT ,如果您在 IE10 以外的浏览器中查看该应用程序,则输出正文 onload 函数将匹配输入正文 onload 函数。在 IE10 中,无论输入是什么,它都会将输出 onload 函数设置为 foo(),因为 foo 是父级的 onload 函数。
在 IE10(和所有现代浏览器)中工作的另一种方法是像这样创建和 iframe:
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
var doc = iframe.contentWindow.document;
doc.open();
doc.write(htmlString);
doc.close();
console.log(doc.documentElement.outerHTML);
然而,这有一个不幸的副作用,即写入 iframe 实际上会导致执行我不想要的 html。
根据我的研究,这样的东西应该可以工作(并且在不是 IE 的浏览器中也可以)
var doc = document.implementation.createHTMLDocument('temp');
doc.open();
doc.write(htmlString);
doc.close();
console.log(doc.documentElement.outerHTML);
但是在 IE10 中, doc.open 行给出了“未指定的错误”。谁能给我任何线索,或者为什么 IE 与其他浏览器相比如此难以处理此类任务?