使用JavaScript停止iframe加载页面

26

有没有一种方法可以在javascript中停止iframe加载页面的过程?我需要这样做的原因是,我有一个后台的iframe通过Comet机制从Web服务器流式传输数据,我需要能够随意断开连接。

欢迎任何想法。


1
你不确定是否可以将iframe直接指向另一个URL吗?类似这样:document.getElementById("myiframe").src = "http://www.example.com/not-long-polling.html"; - Richard JP Le Guen
1
那是我的第一个想法(+1),但我需要保留框架的内容。 - Konrad
6个回答

33

对于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();
}

15
最好检查 typeof(window.frames[0].stop) 而不是 navigator.appName。未来的IE版本可能会支持这种方式。 - unclenorton
6
@MorSela,我想表达的是,检查功能比检查浏览器更好。条件应该像这样:(typeof (window.frames[0].stop === 'undefined') - unclenorton
1
感谢您的回答。我同意unclenorton的观点:最好测试功能本身的存在,而不是测试浏览器。 - ghusse
1
Alex使用typeof()的例子完美运行。为了让其他人更快地找到答案,我会点赞那个回答。 - Steve Wasiura
2
对于那些正在使用jQuery的人,我在测试stop函数时遇到了问题,因为有一个与之同名的jQuery方法。为了解决这个问题,我使用了JavaScript DOM选择器,像这样:document.getElementById("myId").getElementsByTagName('iframe')[0]。我不知道是否有更简单的替代方法,但它确实能够完成工作。 - v42
显示剩余2条评论

13
整段代码应该像这样(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);
}

1
为什么要使用 setTimeout - Nishi

1

非常简单:

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

1
仅仅,
document.getElementById("myiframe").src = '';

1
这并不能阻止大型和重量级的JavaScript执行,比如Unity WebGL Build。 - user7436930

0
如果您只有元素的引用,您需要使用.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');
}

-2
不支持IE浏览器。
<script>
function stopit() {
window.stop();

};
</script>


<a href="#" onclick="stopit()" class="Stop" title="Stop"></a>

请看一下被接受的答案,我认为它与你发布的内容相当相似。 - Marged

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接