11

我有一个带有 svg 标签的页面。该页面有一个名为“预览”的按钮,单击该按钮应打开一个带有图像(svg)的新窗口。

下面是一段适用于 Chrome/Firefox 但不适用于 IE 的代码(我使用的是 IE 9- IE9 标准模式)

var w = window.open();
var svg = $('#chart');              
var svgPrint = svg.cloneNode(true);
svgPrint.setAttribute('xmlns','http://www.w3.org/2000/svg');
w.document.body.appendChild(svgPrint);

任何建议将不胜感激。

谢谢。

4

2 回答 2

14

IE 将阻止附加在与该元素要附加到的窗口上下文不同的窗口上下文中创建的任何元素。

var childWindow = window.open('somepage.html');

//will throw the exception in IE
childWindow.document.body.appendChild(document.createElement('div'));

//will not throw exception in IE
childWindow.document.body.appendChild(childWindow.document.createElement('div'));
于 2013-06-10T07:00:51.477 回答
1

在处理了同样的问题之后,这是我在 IE 中有效的解决方案的摘录,避免了 SCRIPT5022 错误。感谢这篇文章的帮助。

var myWindow = window.open('about:blank', 'loading...', '');
var myWindowDoc = myWindow.document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'html', null);
var myWindowBody = myWindow.document.createElementNS('http://www.w3.org/1999/xhtml', 'body');

myWindow.document.open().write('<html><head></head><body><div id="targetDiv"></div></body></html>');
myWindow.document.close();

try {
    myWindow.document.getElementById('targetDiv').appendChild(HTMLpayload.cloneNode(true)); 
} catch (e){
    if (HTMLpayload.outerHTML) {
        myWindow.document.getElementById('targetDiv').innerHTML = HTMLpayload.outerHTML;
    } else {
        console.log(e);
    }
}
于 2015-07-09T02:32:55.963 回答