Если вы динамически генерируете содержимое вашего 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>";
Подробнее: Демонстрация утечки скрипта
Пример утечки скрипта между двумя записями 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