2011-10-15 2 views
1

This question не получил удовлетворительных ответов, поэтому я снова спрашиваю.Как заменить все содержимое iframe?

я могу получить свой IFRAME, как это:

var iframe = document.getElementById('preview'); 
var win = iframe.contentWindow; 
var doc = win.document; 

И написать некоторый начальный HTML к нему так:

doc.write('<!DOCTYPE html><html><head><link rel="stylesheet" type="text/css" href="reset.css"></head><body>blah blah</body></html>'); 

И это прекрасно работает, но теперь я хочу, чтобы заменить всю вещь с некоторым новым контентом. Как я могу это сделать?

Чтобы быть понятным, под «всей вещью» я имею в виду и <head>. Мне нужно связать некоторые внешние JS и CSS там.

Предпочтительно, это также включает в себя <!DOCTYPE>, но в этом случае это несущественно.

+0

@RobG: На самом деле, нет. Два ответа, размещенные здесь, полностью отличаются от тех, которые были размещены там, и они действительно работают. Почему я ожидал чего-то другого? Потому что прошло уже полгода с тех пор, как последний вопрос был опубликован, и здесь есть новая пользовательская база, и потому, что я не могу эффективно решить старый вопрос. – mpen

+0

@ RobG: Кроме того, Esailija опубликовала несколько проницательных подсказок, которые я не знал и не присутствовал в других ответах. – mpen

+0

получил ваш вопрос в замешательстве с очень похожим, опубликованным примерно в то же время. – RobG

ответ

2

Вы можете просто удалить старый узел iframe из DOM и создать новый, содержащий новое содержимое.

+0

Да, теоретически я мог бы заменить весь iframe, но не было бы более эффективным заменить только документ iframe? Можно ли это сделать? – mpen

+1

Настройка 'doc.documentElement.outerHTML' на что-то дает сообщение:" NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7 "', поэтому вы не можете заменить весь документ, но ничего ниже '' элемент возможен ('' и '') – Esailija

+0

@Esailija: Приятно знать! С вашей помощью, я думаю, у меня есть все, что мне нужно знать сейчас! :) Я считаю, что это решение Дарина является наиболее эффективным ответом. – mpen

1

Я считаю, что с помощью innerHTML должно работать:

doc.documentElement.innerHTML = "<script src='blah.js'></script><style></style>" 
+0

А ... это объясняет, почему мои попытки не работали. Придется делать это на 'documentElement'! Это похоже на работу, но я не могу установить '' с помощью этого метода, не так ли? В основном это заменяет * содержимое * '' no? – mpen

+1

'' 'сам элемент не модифицируется, но документ имеет свойство' iframe.contentWindow.document.doctype', которое имеет свойства типа 'doc.doctype.systemId'. Свойства доступны только для чтения, поэтому, вероятно, не рекомендуется динамически изменять динамический тип – Esailija

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