检查弹出窗口是否以电话友好的方式关闭(检查.closed的值不起作用)

时间:2012-11-15 15:37:04

标签: javascript android

如果我使用newWindow = window.open(url, name, dimensions)创建了一个弹出窗口,如何以可在移动浏览器上运行的方式检查窗口是否已关闭?

我尝试使用if(newWindow.closed),这适用于PC上的Chrome,适用于iPhone。但是,在我测试的Android手机上,这不起作用;弹出窗口关闭但newWindow.closed不正确。 我应该使用哪种测试,以便在任何平台上检查弹出窗口是否已关闭?

额外信息: 我在Android手机上访问我的页面时,在关闭弹出窗口之前和之后使用jsconsole来记录newWindow(带console.log(newWindow))。当弹出窗口打开时,它会在控制台中显示为[object DOMWindow],一旦窗口关闭console.log(newWindow),只需在jsconsole中打印一个空行。请注意,打印空白行与jsconsole显示nullundefinedfalse的方式不同,后者与我刚输入的完全相同。此外,尝试if(newWindow.closed || !newWindow)的工作并不比if(newWindow.closed)更好;似乎无论什么样的对象newWindow在弹出窗口关闭后变成了它,它仍然是真实的。

1 个答案:

答案 0 :(得分:3)

检查if(newWindow.closed != false)而不是if(newWindow.closed)解决了我的问题,并且可以在我测试过的所有平台上运行。问题的原因似乎是在某些Android手机上,当弹出窗口关闭时,newWindow.closed的值最终为undefined而不是true。但是,当窗口打开时,newWindow.closed可靠地设置为false,无论您使用什么平台。

可以在这里找到可能解释这个bug背后原因的一些相关讨论(尽管我无法确认其真实性): http://code.google.com/p/android/issues/detail?id=21061