6

我有代码来检查窗口是否关闭。如果我留在同一页面上,它会起作用。
使用 Internet Explorer,如果我单击一个链接,然后重定向到另一个站点,即使 WINDOW 实际上从未关闭,window.closed 也会返回 true。

我正在这样做:

w = window.open("mypage.html");

var t = setInterval(function() { 
  if (!w) {  alert('a'); } 
  if (w.closed) { alert('b'); } 
   if (!w || w.closed) { 
     clearInterval(t); hide('mainShadow'); 
   }
}, 800); 

在“mypage.html”中,有一个指向另一个站点的链接。当去另一边时, w.closed 返回true

IE中是否有真正检查窗口是否关闭的好方法。
合同并不真正满意,因为窗口从未真正关闭。

此代码适用于 Chrome,不适用于 IE9

4

2 回答 2

2

合同并不真正满意,因为窗口从未真正关闭。

这似乎是混乱的根源。JavaScript-in-a-browser 中的window对象是指显示某个浏览器窗口中包含的文档的窗口,但它并不指浏览器自己看到的那个窗口。单个浏览器窗口也不是与单个window实例相关联的情况。所以一个window实例可以关闭,因为它不再显示。这是准确的,因为window严格来说,该元素不是关于window作为窗口外部视图的浏览器实体,而不是关于作为window包含代码的文档看到的窗口的内部视图的 JavaScript 对象。

简短的版本是我不相信有一种方法可以从网页中执行此操作,因为可见性的外部范围,即window对象,并不指您要操作的实际对象。

于 2012-11-18T16:14:08.593 回答
0

由于同源策略,您无法阻止此功能。但是,您可以使用 window.opener.someFunction() 每 100 毫秒调用一次父窗口中的函数。如果父窗口在 500 毫秒后没有收到消息,那么它可以假定它打开的窗口已关闭。您可以尝试使用 window.postMessage 进行类似操作,但它在 IE 中不起作用。

于 2012-11-17T02:23:18.903 回答