2012-03-16 71 views
3

跨域window.close事件比如我是在域1:的Javascript:从父窗口

a.click(function(){ 
    window.win=window.open(domain2,'name'); 
}); 

现在我对DOMAIN2,我关闭它。 window.win如何知道用户关闭了该窗口?是否有任何事件或财产要通过间隔检查?

+0

[检测何时跨域弹出窗口关闭(http://stackoverflow.com/questions/4851438/detecting-when-a-cross-domain-popup-window-closes)非常相似。 – 2012-04-19 14:57:50

回答

5

有这不是任何W3C规范的一部分的属性。这就是所谓的closed,想

if(window.win.closed) { 
    // window was closed 
} 

获得访问我不知道关于跨浏览器了兼容性该属性。我也不确定这是如何在跨域的行为。但是,如果你尝试它,请让我和这个社区的其他人知道它。


另一种选择是你自己照顾通知。这意味着,您正在监听弹出式窗口中的onbeforeunload。事件触发时,您可以使用HTML5的postMessage方法在跨域窗口之间进行通信。例如:

主窗口:

window.addEventListener('message', function(e) { 
    if(e.origin === 'http://www.popupdomain.com') { 
     if(e.data === 'closed') { 
      alert('popup window was closed'); 
     } 
    } 
}, false); 

域2:

window.onbeforeunload = function() { 
    window.opener.postMessage('closed', 'http://www.popupdomain.com'); 
}; 

这个解决方案唯一需要注意的是,它仅适用于支持基本的HTML5浏览器兼容。还有其他(偷偷摸摸的)方式在古老的浏览器上进行跨域通信,但我想这是另一回事。

+0

从窗口返回的DOM对象。开放是空的。我希望可以有那个封闭的财产。其他解决方案? – Somebody 2012-03-16 11:53:35

+0

猜猜我不得不听这个故事。 :) – Somebody 2012-03-16 11:59:31

+0

@Beck:那是因为它不工作,或者你不能依赖html5? – jAndy 2012-03-16 12:05:17

0

我工作在DOMAIN1的窗口从DOMAIN2打开了类似的问题。我需要检查窗户何时关闭。我尝试以下操作: -

  1. 我用window.onunload事件,它并没有因为Same Origin Policy工作,并表现出以下错误

    错误:试图在清理范围内经营的编译和去脚本 源文件:铬://firebug/content/net/httpLib.js

    错误:试图运行编译和去脚本在清理范围 源文件:铬://萤火/内容/火狐/ tabWatcher.js

  2. 但是我维持窗口对象的数组和施加“Window.closed”属性,它的工作原理,即使在横域。 :)

  3. 您也可以尝试postMessage APICORS

1

您可以检查跨域被使用在窗户上的间隔检查关闭关闭属性。

var url = "http://stackoverflow.com"; 
var width = 500; 
var height = 500; 
var closeCheckInterval = 500; //Check every 500 ms. 

var popup = window.open(url, "_new", 'width=' + width + ', height=' + height); 
popup.focus(); 

var closeCheck = setInterval(function() { 
    try { 
     (popup == null || popup.closed) && (clearInterval(closeCheck), onWindowClosed());  
    } catch (ex) { } 
}, closeCheckInterval); 

var onWindowClosed = function() { 
    ... 
    // Stuff to do after window has closed 
    ... 
} 
相关问题