Выгрузка/удаление содержимого из iFrame
Есть ли способ выгрузить страницу, загруженную внутри iframe? Я не хочу менять iframe src на пустую страницу, если это возможно. Я в основном ищу что-то, что сделает что-то вроде этого $('#frameID').attr("src","");
, за исключением того, что код, похоже, не очищает ранее загруженную страницу.
Есть ли функция "unload"
, которую я могу вызвать, которая будет reset iframe, чтобы у нее не было содержимого, загруженного внутри?
Ответы
Ответ 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();