Заменить все содержимое Iframe - PullRequest
15 голосов
/ 26 апреля 2011

Есть ли способ заменить ВСЕ содержимое iframe, используя Javascript (или Jquery)?

Например, если у моего iframe было следующее содержание ...

blah outside of html
<html>
<head>
</head>
<body>
<h1> my title </h1>
</body>
</html>
blah outside of html

.. Все это может быть заменено вашим скриптом:)

Лучшее, что я видел до сих пор, это:

$(youriframe).contents().find('html').html('your content here'); 

но это все равно не заменит контент вне тегов html. У нас есть интересный сценарий, в котором мы должны убедиться, что ВСЕ содержимое заменено.

ИЛИ создается новый iframe со свежим содержимым, который просто заменяет предыдущий iframe.

Пожалуйста, не комментируйте об атрибуте src.

Ответы [ 3 ]

20 голосов
/ 30 ноября 2012

У меня та же проблема, и если я использую код, подобный этому:

$(youriframe).contents().find('html').html('your content here'); 

Он отлично работает в Chrome или FireFox, но в IE8 ничего не отображается или полоса прокрутки в iframe не появляется.

Если я использую метод Рэйчел, содержимое iframe будет таким во всех браузерах:

<iframe>
    <html>
        <head>
        </head>
        <body>
        </body>
    </html>
</iframe>

есть ли другое решение?

Попробовал вот это:

var doc = document.getElementById(iframeId).contentWindow.document;
doc.open();
doc.write(iframeContent);
doc.close();

это работает на моем случае, то есть ie8 и FF / chrome.

14 голосов
/ 25 мая 2011

Я предполагаю, что у вас нет проблем с межсайтовым скриптингом в этом случае ... Вам повезло с использованием contentWindow? Мне кажется, что-то вроде этого работает достаточно хорошо:

iframe = document.getElementById('iframe_id');
iframe.contentWindow.document.open()
iframe.contentWindow.document.write(new_content_here);

Не моя идея, нашел это здесь: Записать элементы в дочерний iframe, используя Javascript или jQuery

0 голосов
/ 02 мая 2011
У

есть похожий сценарий, когда я генерирую новый iFrame с контентом из другого домена при каждом щелчке строки таблицы.

Для этого я использую jQuery AJAX и PHP. PHP смотрит на мою таблицу MySQL и получает URL iFrame, который я хочу загрузить; он генерирует HTML для iFrame, и я заменяю этот контент jQuery AJAX.

Мой HTML выглядит примерно так:

<div class="xFrame">
    <iframe id="xFrameWindow" name="xFrameWindow" src=""></iframe>
</div>

И мой AJAX-вызов выглядит так:

function loadPage(record_id) {

    $.ajax({
        type: "POST",
        url: "php/ajax_handler.php",
        data: "action=makeIFrame&record_id=" + record_id,
        success: function(msg){
            $('.xFrame' ).html(msg);
        }
    });
}

Код заменяет HTML-код div, который содержит iFrame, новым iFrame.

Надеюсь, это (или что-то подобное) работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...