12

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

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

4

3 回答 3

4

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

该错误现在已修复

从 chrome 10 开始,这个问题应该得到解决。

虽然这里有一个相关的错误

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

于 2012-01-26T07:45:20.620 回答
0

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

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

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

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

于 2012-02-10T16:03:40.973 回答
0

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

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');}

试试这个...

于 2012-01-26T07:55:59.350 回答