【问题标题】:Stopping a iframe from loading a page using javascript阻止 iframe 使用 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),但我需要保留框架的内容。

标签: javascript dom iframe comet


【解决方案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>
      

      【讨论】:

      • 请看一下接受的答案,我认为它与您发布的内容相当
      猜你喜欢
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      相关资源
      最近更新 更多