2009-12-05 78 views
4

我在尋找彈出式關閉事件。我發現一個for XUL,但我需要它的HTML。處理彈出式關閉的正確方法

Popup有closed屬性。我可以check it once at half second

function open_popup() { 
    var popup = open('http://example.com/', 'popup', 'height=450,width=450'); 
    var timer = setInterval(function(){ 
    if (popup.closed) { 
     alert('popup closed!'); 
     clearInterval(timer); 
    } 
    }, 500); 
} 

我已經在Chrome 4.0.249.27,Opera 10.10,Safari 4.0.4和Firefox 3.5.5上測試過它。一切正常。

但setInterval打擾我。這是醜陋的。有沒有更好的方法來做到這一點?

更新: 我使用彈出式認證對話框(oAuth,實際上)。我想在彈出關閉後(通過postMessage)向父窗口發送一些數據。

頁面從另一個域彈出。所以,由於安全限制,我無法添加任何事件(unload)。

由於iframe腳本腳本,我無法使用iframe。所以,我不能使用任何花哨的jQuery模態對話框。

我無法編輯任何東西彈出窗口內。

+0

嘎!我前幾天看到了這樣做的方式!在新創建的窗口中有一個屬性,我認爲它是文檔的一個屬性,允許您回溯到創建的原始窗口,並說運行一個函數。它在你的例子中非常類似popup.closed,除了 – 2009-12-05 23:51:50

+0

aha,發現它 - 下面的答案。 – 2009-12-05 23:54:01

回答

1

你可能想看看進入unload事件,看看Javascript: Popups

編輯:如你所說,你不能彈出裏面編輯什麼,真的沒有留下任何選項。我相信你目前的setInterval代碼很好。您應該問問自己,是否實時檢測彈出窗口是絕對關鍵的。那500毫秒的定時器肯定不會消耗任何資源,也不會使某些電腦癱瘓。

+0

這不起作用。我更新了問題。 – NVI 2009-12-06 00:10:35

0

我已經使用jQuery的對話框,它有一個關閉事件

http://jqueryui.com/demos/dialog/

我不確定我是否理解你的問題,你爲什麼要使用計時器?

+0

我更新了問題。 – NVI 2009-12-06 00:11:11

0

在彈出窗口中使用window.opener。即是這樣的:

onunload = opener.alert('popup closed'); 

onunload = opener.nameOfAFunction(); 
+0

我無法編輯彈出窗口內的任何內容。 – NVI 2009-12-06 00:12:10

+0

因爲你不想或沒有權限訪問該文件? 你可以做類似 popup.onunload = opener。警報('popup closed');如果您無權訪問該文件,則爲 。如果你不想,那爲什麼不呢。如果你不能的另一個原因,請解釋。 – 2009-12-06 00:32:25

+0

我無權訪問該文件。 「文件」,其實有點像https://api.login.yahoo.com/oauth/v2/request_auth?oauth_token=rpfbncv&oauth_nonce=123456800&oauth_timestamp=1257965400&oauth_consumer_key=ef1uGeq4fP9vbnDXQAtlN0IcKvY8RTef0MztKJfBRYacPiuYmQXFdi10DOU3WSDVfn7MQw5basdrn92urX47wlD3F6G4oOA6JHE6&oauth_signature_method=plaintext&oauth_signature=1e782b9c13315e30d2fbac12348942cc9db674f2%26&oauth_version=1.0&xoauth_lang_pref=en-us&oauth_callback=http:/ /mysite.com/callbackurl.php – NVI 2009-12-06 00:39:41