阻止 iframe 使用 javascript 加载页面
Posted
技术标签:
【中文标题】阻止 iframe 使用 javascript 加载页面【英文标题】:Stopping a iframe from loading a page using javascript 【发布时间】:2011-01-13 12:44:23 【问题描述】:在 javascript 中有没有办法在加载页面的过程中停止 iframe?我需要这样做的原因是我有一个来自网络服务器的后台 iframe 流数据(通过 Comet 样式机制),我需要能够随意切断连接。
欢迎任何想法。
【问题讨论】:
没有足够的信心将其作为答案,但是您不能将 iframe 定向到另一个 url 吗?类似document.getElementById("myiframe").src = "http://www.example.com/not-long-polling.html";
这是我的第一个想法 (+1),但我需要保留框架的内容。
【参考方案1】:
对于 FireFox/Safari/Chrome,您可以使用 window.stop():
window.frames[0].stop()
对于 IE,你可以用 document.execCommand('Stop') 做同样的事情:
window.frames[0].document.execCommand('Stop')
对于您可以使用的跨浏览器解决方案:
if (navigator.appName == 'Microsoft Internet Explorer')
window.frames[0].document.execCommand('Stop');
else
window.frames[0].stop();
【讨论】:
检查typeof(window.frames[0].stop)
可能比navigator.appName
更好。未来的 IE 版本可能会支持。
@MorSela,我想说检查功能比检查浏览器更好。条件看起来像(typeof (window.frames[0].stop === 'undefined')
。
感谢您的回答。我同意 unclenorton 的观点:最好测试一个功能本身的存在而不是测试浏览器。
Alex 使用 typeof() 的例子非常完美。为其他人投票以更快地找到答案
对于那些使用 jQuery 的人,我在测试 stop
函数时遇到了问题,因为 jQuery method with the same name。为了解决这个问题,我使用了这样的 javascript dom 选择器:document.getElementById("myId").getElementsByTagName('iframe')[0]
。我不知道是否有一个简单的替代方案,但它可以完成这项工作。【参考方案2】:
整个代码应该是这样的,(unclenorton的那行少了一个括号)
if (typeof (window.frames[0].stop) === 'undefined')
//Internet Explorer code
setTimeout(function() window.frames[0].document.execCommand('Stop');,1000);
else
//Other browsers
setTimeout(function() window.frames[0].stop();,1000);
【讨论】:
为什么使用setTimeout
?【参考方案3】:
只是,
document.getElementById("myiframe").src = '';
【讨论】:
这不会阻止大型和繁重的 javascript 执行,例如 Unity WebGL Build。【参考方案4】:非常简单:
1) 获取你不想加载的 iframe 或 img:
let myIframe = document.getElementById('my-iframe')
2) 然后你可以将 src 属性替换为 about.blank:
myIframe.src = 'about:blank'
就是这样。
如果您想在某些事件发生时一次加载 iframe 或图像,那么只需将 src 变量存储在 dataset 中:
myIframe.dataset.srcBackup = myIframe.src
// then replace by about blank
myIframe.src = 'about:blank'
现在您可以在需要时轻松使用它:
myIframe.src = myIframe.dataset.srcBackup
【讨论】:
【参考方案5】:如果您只有对该元素的引用,则需要使用.contentX
来获取document
/window
以运行接受的答案。
对于动态添加的 iframe 元素,还需要检查 iframe 是否确实有文档。
function stopIframe(element)
var doc = element.contentDocument;
//iframes wont have a document if they aren't loading/loaded
//check so JS wont throw
if (!doc)
return;
//try for modern browsers
if (doc.defaultView.stop)
doc.defaultView.stop();
//fallback for IE
else
doc.execCommand('Stop');
【讨论】:
【参考方案6】:IE 不支持
<script>
function stopit()
window.stop();
;
</script>
<a href="#" onclick="stopit()" class="Stop" title="Stop"></a>
【讨论】:
请看一下接受的答案,我认为它与您发布的内容相当以上是关于阻止 iframe 使用 javascript 加载页面的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法阻止 Symfony2 为某些路径发送会话 cookie?