【问题标题】:Google chrome onbeforeunload wrong behavior with iframeGoogle chrome onbeforeunload iframe 的错误行为
【发布时间】:2010-12-08 18:04:47
【问题描述】:

假设我有两页。其中一个包含另一个内部作为 iframe。如果您在父页面上订阅 onbeforeunload 事件,则当 iframe 处于焦点时关闭选项卡时不会触发此事件。我想这是这里写的一个错误: Google Chrome issues

但我提到,例如,谷歌文档处理这种情况。谁能给我一个解决方案? 请注意,我无法实际访问 iframe 内容,因为它是第三方 html 编辑器 (WYSIWYG)。

【问题讨论】:

  • 您是否尝试订阅 iframe onbeforeunload 事件?
  • 是的。但是,它没有任何效果。
  • 有人对此有更新吗?
  • 你试过window.addEventListener("beforeunload",function(){...});吗?

标签: javascript google-chrome iframe wysiwyg onbeforeunload


【解决方案1】:

我知道这是一个老问题,但只是为了帮助通过搜索来到这里的人:

错误是fixed by now here

从 chrome 10 开始,这个问题应该已经解决了。

有一个related bug though here

因此,简而言之,如果您仍然无法在帧上触发“onbeforeunload”,则可能是由于通过 JavaScript 更改了内容,例如 document.open document.write document.close 等。

【讨论】:

    【解决方案2】:

    以下代码适用于所有浏览器

    if (typeof window.addEventListener != 'undefined') {
        window.addEventListener('beforeunload', test, false);
    }
    else if (typeof document.addEventListener != 'undefined') {
        document.addEventListener('beforeunload', test, false);
    }
    else if (typeof window.attachEvent != 'undefined') {
        window.attachEvent('onbeforeunload', test);
    }
    
    else {
        if (typeof window.onbeforeunload == 'function') {
            window.onbeforeunload = function() {
                test();
            };
        }
        else {
            window.onbeforeunload = test;
        }
    }
    
    function test(){ alert('working');}
    

    尝试一次...

    【讨论】:

    • 这仍然不适用于最近的 Chrome 版本(刚刚尝试 18.0)。
    【解决方案3】:

    您也可以尝试将 iframe 的 url 更改为“about:blank”,例如:

    $("#myFrameId")[0].src = "about:blank";
    

    它强制 chrome “干净地”关闭 iframe 中包含的窗口。

    顺便提一下:如果你只想关闭你的 iframe 而不是父窗口,你必须给 chrome 足够的时间来执行你附加到 'onbeforeunload' 的处理程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      相关资源
      最近更新 更多