Подтвердить что ты не робот

Выгрузка/удаление содержимого из iFrame

Есть ли способ выгрузить страницу, загруженную внутри iframe? Я не хочу менять iframe src на пустую страницу, если это возможно. Я в основном ищу что-то, что сделает что-то вроде этого $('#frameID').attr("src","");, за исключением того, что код, похоже, не очищает ранее загруженную страницу.

Есть ли функция "unload", которую я могу вызвать, которая будет reset iframe, чтобы у нее не было содержимого, загруженного внутри?

4b9b3361

Ответ 1

В других решениях используется innerHTML, который не всегда будет работать в XHTML. Они также очищают только document.body (все в <head> все еще присутствует). Вот решение, которое использует DOM:

var frame = document.getElementById("myFrame"),
frameDoc = frame.contentDocument || frame.contentWindow.document;
frameDoc.removeChild(frameDoc.documentElement);

В этом решении используется innerHTML:

var frame = document.getElementById("myFrame"),
frameDoc = frame.contentDocument || frame.contentWindow.document;
frameDoc.documentElement.innerHTML = "";

Ответ 2

Попробуйте это,

$("iframe").contents().find("body").html('');

Он очищает только innerHTML вашего тега внутри и не выгружает ваш iframe, поэтому вы можете повторно использовать свой iframe без перезагрузки и его работы во всех браузерах и довольно просто!

Ответ 3

$( '# frameID'). ContentWindow.document.body.innerHTML = '';

Как и в любом iframe, это работает только в том случае, если вы находитесь в одном домене.

Ответ 4

Если генерировать динамически содержимое вашего iframe, все загружаемые скрипты/переменные будут протекать из одной записи в другую. Таким образом, решение, предоставленное @Eli для очистки элемента dom , не будет работать.

Короче:

Чтобы очистить, оберните ваш iframe в элемент div и замените его содержимое dom.

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <div id="wrapper">
    <iframe id="test"></iframe>
  </div>
</body>
</html>

Очистить:

var wrapper = document.getElementById('wrapper');
wrapper.innerHTML= "<iframe id='test'></iframe>";

Подробнее: демонстрация script утечки

Пример утечки script между двумя файлами iframe (проверяется с помощью Chrome):

var iframe = document.getElementById('test');

// define variable 'a'
var content = "<html><body><script>var a=555;</script></body></html>";

iframe.contentWindow.document.open();
iframe.contentWindow.document.write(content);
iframe.contentWindow.document.close();

// uncomment this to clean the iframe
//document.getElementById('wrapper').innerHTML= "<iframe id='test'></iframe>";

// write 'a' if defined
var content2 = "<html><body><div id='content'></div><script>document.getElementById('content').innerHTML=typeof a === 'undefined' ? 'undefined' : a;</script></body></html>";

var iframe2 = document.getElementById('test');
iframe2.contentWindow.document.open();
iframe2.contentWindow.document.write(content2);
iframe2.contentWindow.document.close();

Если вы запустите этот код, вы увидите, что вывод второго iframe равен 555, хотя он был определен в первом iframe.

Если вы раскомментируете среднюю часть, она будет работать как ожидалось.

Связанный с этим вопрос: Предотвращение утечки памяти, загружающей содержимое в iframe

Ответ 5

$("#frameId").contents().find("div#SomeDIVinsideFrame").remove(); // removes some div content inside iframe

$("#FrameId").remove(); // removes frame

была та же проблема, чтобы показать новости iframe на http://www.livepage.info

Ответ 6

Удаление и повторное создание iframe - самое умное решение здесь (без обид по отношению к другим ответам).

Удалив только innerHTML iframe, вы не очищаете хранящиеся переменные, связанные eventListeners и т.д.

Будьте осторожны с этим, это может вызвать множество проблем (например, утечки памяти, несколько триггеров одного и того же события и т.д.).

Ответ 7

Сначала возьмите документ кадра:

var frame = $('#frameId').get(0);
var frameDoc = frame.contentDocument || frame.contentWindow.document;

Затем запишите его:

frameDoc.getElementsByTagName('body')[0].innerHTML = "";

Я думаю, что это тоже должно работать:

$('body', frameDoc).html("");

Теперь вы можете что-то сделать с любыми сценариями, которые могут быть загружены в голову, но это должно заставить вас начать.

Ответ 8

Вы можете вызвать событие разгрузки этого iframe, например

$('body').trigger('unload');

а затем удалите iframe из родительского окна и перезагрузите новый iframe новым src при необходимости.

$('#iframe_wrapper').html('');
$('#iframe_wrapper').html('<iframe src="...">');

Ответ 9

var frame = document.getElementById("myframe");
frame.src = "about:blank";

Это работало от меня и предотвратило утечку памяти. В моем случае я тоже должен был уничтожить родителя. В этом случае вам нужно уничтожить родителя с некоторой задержкой, чтобы предотвратить утечку памяти

Ответ 10

function getContentFromIframe(iFrameName)
{

var myIFrame = document.getElementById(iFrameName);
var content = myIFrame.contentWindow.document.body.innerHTML;

//Do whatever you need with the content    

}

он определенно будет работать!!!!!!!!!!!!!!!!

Ответ 11

Это сработало для меня, очистило все в теге iframe; тело, голова, html и все:

$("iframe").contents().empty();