Dan*_*Dan 34 javascript iframe jquery events dom
无论如何要卸载已在iframe中加载的页面?如果可能的话,我不想将iframe src更改为空白页面.我基本上在寻找能做类似这样的事情,$('#frameID').attr("src","");
除了代码似乎没有清除以前加载的页面.
是否有一个"unload"
我可以调用的函数,它会重置iframe,以便它没有加载任何内容?
Eli*_*rey 29
其他解决方案使用innerHTML
,但在XHTML中并不总是有效.他们也只清楚document.body
(任何东西<head>
仍然存在).这是一个使用DOM的解决方案:
var frame = document.getElementById("myFrame"),
frameDoc = frame.contentDocument || frame.contentWindow.document;
frameDoc.removeChild(frameDoc.documentElement);
Run Code Online (Sandbox Code Playgroud)
此解决方案使用innerHTML
:
var frame = document.getElementById("myFrame"),
frameDoc = frame.contentDocument || frame.contentWindow.document;
frameDoc.documentElement.innerHTML = "";
Run Code Online (Sandbox Code Playgroud)
小智 7
试试这个,
$("iframe").contents().find("body").html('');
Run Code Online (Sandbox Code Playgroud)
它只清除你标签里面的innerHTML,而不是实际卸载你的iframe,所以你可以重用你的iframe而无需重新加载它,并且它可以在所有浏览器中工作,非常简单!
如果动态生成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>
Run Code Online (Sandbox Code Playgroud)
要清理:
var wrapper = document.getElementById('wrapper');
wrapper.innerHTML= "<iframe id='test'></iframe>";
Run Code Online (Sandbox Code Playgroud)
详细说明:脚本泄漏演示
两个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();
Run Code Online (Sandbox Code Playgroud)
如果您运行此代码,您将看到第二个iframe的输出555
虽然已在第一个iframe中定义.
如果取消注释中间部分,它将按预期工作.
相关问题:避免内存泄漏将内容加载到iframe中
var frame = document.getElementById("myframe");
frame.src = "about:blank";
Run Code Online (Sandbox Code Playgroud)
这对我有用,也防止了内存泄漏。就我而言,我也必须摧毁父母。在这种情况下,您必须延迟销毁父级以防止内存泄漏
归档时间: |
|
查看次数: |
85476 次 |
最近记录: |