2014-05-19 7 views
1

В настоящее время я получаю части веб-страницы через XHR, а затем разбираю их, используя DOMParser. После этого я меняю некоторые элементы, но я не могу добавить этот документ в iFrame.Добавить документ в iFrame

документ, который обрабатывается все в порядке, но при добавлении этого документа в плавающем фрейме по телефону iFrame.contentDocument = parsedDocument, iFrame.contentDocument остается пустым (на самом деле Есть теги HTML, головы и тела, но их содержание пуст).

Я разборе полученные данные следующим образом:

var parser = new DOMParser(); 
var parsedDocument= parser.parseFromString(xhr.response, 'text/html'); 

И мое ожидание было сделать что-то вроде этого:

iFrame.contentDocument = parsedDocument; 
+0

А если вы напишете? 'var doc = document.getElementById ('iframeId'). contentWindow.document; doc.open(); doc.write (parsedDocument); doc.close(); ' – epascarello

+0

@epascarello Теперь он отображает' [object HTMLDocument] 'в iFrame. – MarijnS95

+0

@ MarijnS95 Тогда вы должны попробовать 'xhr.response' вместо' parsedDocument'. 'parsedDocument' является объектом' HTMLDocument', в то время как вы хотите написать фактическую строку вместо этого, иначе он попытается написать 'HTMLDocument.toString()', который вернет '[object HTMLDocument]'. – Joeytje50

ответ

1

Like epascarello сказал в комментариях, следующие будут работать:

var doc = document.getElementById('iframeId').contentWindow.document; 
doc.open(); 
doc.write(xhr.response); 
doc.close(); 

Но, поскольку вам необходимо изменить документ, прежде чем размещать его внутри ifra мне, вам сначала нужно сделать это:

//your code 
var parser = new DOMParser(); 
var parsedDocument = parser.parseFromString(xhr.response, 'text/html'); 
//put your required edits here 
parsedDocument.getElementById('foo').style.color = 'red'; //example 
//now to get back the edited HTML code as a string 
var newHTML = parsedDocument.documentElement.outerHTML; 
//and now for the code epascarello mostly wrote 
var doc = document.getElementById('iframeId').contentWindow.document; 
doc.open(); 
doc.write(newHTML); 
doc.close(); 

Вы также можете указать доктайп там, заменив строку из doc.write(newHTML); с:

doc.write('<!DOCTYPE html>'+ newHTML); 

поскольку document.documentElement.outerHTML не будет содержать с ним.

Смежные вопросы