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 的错误行为的主要内容,如果未能解决你的问题,请参考以下文章