2013-06-10 4 views
6

У меня есть страница с тегом svg. На странице есть кнопка «Предварительный просмотр», которая при нажатии должна открывать новое окно с изображением (svg).appendChild не работает с window.open в IE

Ниже приведен фрагмент кода, который работает в 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); 

Любые предложения будут высоко оценены.

Спасибо.

+0

Я предполагаю, что 'about: blank' запускается в режиме Quirks, который не поддерживает' svg'. – Teemu

+0

@Teemu Он запускается в стандартном режиме IE9 ... – ria

+0

Да, ваша главная страница есть, но «окно», которое вы открываете, скорее всего будет работать в режиме Quirks, так как у него нет объявления doctype ... Просто проверьте его, открыв в нем реальный документ. – Teemu

ответ

10

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

Я пробовал это .. но я получаю эту ошибку: DOM Исключение: HIERARCHY_REQUEST_ERR (3) – ria

+0

Также там, где у вас есть эта ошибка (предложение или часть кода, пожалуйста) –

+4

Спасибо, ребята! Создание узлов в том же контексте я добавляю к решению проблемы :) – franDayz

0

Разобравшись с тем же вопросом, что это выдержка из решения, который работал в моем случае для 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); 
    } 
} 
Смежные вопросы