appendChild在IE中没有使用window.open

时间:2013-06-10 06:02:28

标签: javascript internet-explorer window.open appendchild

我有一个带有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);

任何建议都将受到高度赞赏。

感谢。

2 个答案:

答案 0 :(得分:13)

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'));

答案 1 :(得分:1)

在处理同样的问题之后,这是我在IE案例中工作的解决方案的摘录,避免了SCRIPT5022错误。感谢this post的帮助。

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);
    }
}