2015-10-14 4 views
1

Я хочу загрузить HTML как строку в iframe через Javascript. так:javascript в iframe document.write перезаписывает родительский документ

$('#iframe1').contents().find('html').html("<h1>This is an iframe</h1>"); 

это работало замечательно, пока я не узнал, что внутри этого HTML Javascript как Предстоящие document.write Обращается к неправильному документа -> родитель!

Вот Plunker, чтобы показать: http://plnkr.co/edit/YQAqqSDCVKnP3uhLj4lF?p=preview

если я загружаю тот же HTML к iframe через ЦСИ в качестве внешнего документа, то document.write идет к iframe (а не к родителю), который является то, что я ожидал.

Есть ли какие-то идеи? Как я могу сказать браузеру правильно создать область документа iframes до того, как он выполнит свой Javascript?


PS: Его означало быть для целей предварительного просмотра, так что я впрыснуть HTML-код источника, но в этом коде, document.write допускается (доверенный!).

ответ

1

Хорошо. srcdoc полезно здесь.

$('#iframe1').attr({srcdoc:intrusiveHTML}); 

Я обновил Plunker.

С srcdoc, Javascript не ускользнет от области документа.

Он не будет работать в IE (http://caniuse.com/#feat=iframe-srcdoc), так что он может помочь использовать Polyfill дополнительно: https://github.com/jugglinmike/srcdoc-polyfill

Но я не проверял, что до сих пор.

+0

srcdoc-polyfill, похоже, работает хорошо, хотя это не единственный способ решить проблему, это тот, который смотрит вперед, так что хороший совет. – Stoffe

0

Вместо использования document.write используйте document.getElementById('iframe1').contentWindow.document.write. Потому что, когда вы укажете документ, вам потребуется документ с основным окном, поэтому нам нужно указать, какой фреймворк iframe нужно использовать.

+0

его не я, используя document.write, его html-код от третьего лица - не под моим контролем. – elegon

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