gpt4 book ai didi

javascript - window.onbeforeunload 不在子窗口中触发

转载 作者:行者123 更新时间:2023-11-30 09:09:20 26 4
gpt4 key购买 nike

我想在 Javascript 中将一个函数绑定(bind)到子窗口的 beforeunload 事件。我有以下代码:

newWind = window.open(settings.url, "Dialog", "width=" + settings.width + ",height=" + settings.height + ",resizable=" + settings.resizable + ",scrollbars=" + true);

newWind.onunload = function() { alert('test'); }

在 Firefox 中工作正常,但在 IE7 中失败。谁能看出我做错了什么?

最佳答案

newWind.onunload = function() { alert('test'); }

出于某种原因,IE 不允许您将函数从一个窗口上下文分配给另一个窗口的 on[before]unload。您可以将外部函数分配给其他事件处理程序,包括 newWind.document.body.onunload,但这不是一个好主意。

首先,因为 IE 的垃圾回收是基于窗口的,所以如果您关闭或导航打开的窗口,弹出窗口将尝试执行一个死函数,或者在范围内使用死变量的函数,从而导致奇怪的 JavaScript 错误。

其次,因为您不知道打开程序何时加载了足以设置处理程序的弹出文档。在 open 调用之后,弹出文档可能根本没有开始加载,在这种情况下,您无法安全地在其上设置任何事件处理程序。因此在设置 onunload 处理程序之前您需要短暂的延迟,并且用户可能会在那个时候关闭窗口。而开场白不知道要拖多久;相反,子对话框必须回调父对话框以告知它已准备就绪。最好让子弹出窗口负责接收它自己的事件并调用开启者让它知道这些事件。

跨窗口脚本有无穷无尽的陷阱。尽量避免它。对于对话框,始终使用页内元素,这比窗口弹出窗口更可靠且更不烦人。

关于javascript - window.onbeforeunload 不在子窗口中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1728495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com