Google chrome onbeforeunload iframe 的错误行为

Posted

技术标签:

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

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

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

【问题讨论】:

您是否尝试订阅 iframe onbeforeunload 事件? 是的。但是,它没有任何效果。 有人对此有更新吗? 你试过window.addEventListener("beforeunload",function()...);吗? 【参考方案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' 的处理程序。

【讨论】:

以上是关于Google chrome onbeforeunload iframe 的错误行为的主要内容,如果未能解决你的问题,请参考以下文章

Fedora32安装google chrome

Ubuntu怎样安装Google Chrome

如何解决ajax在google chrome浏览器上失效

解决ubuntu无法使用root用户启动Google Chrome浏览器

google chrome 调试css怎么禁止缓存

Google chrome 出现WEbGL遇到问题