2013-01-22 30 views
1

情況是這樣的。使用JavaScript,我打開一個窗口,其中顯示一個加載指示器,顯示在我的域中的URL。如何在我的javascript打開的窗口關閉時捕獲事件

大約一秒後,窗口的URL被更改爲貝寶窗口(所以其他域)。我希望能夠在用戶關閉貝寶窗口時捕獲事件,以便我可以將用戶重定向到正確的頁面,說明付款失敗。

我遇到了window.onbeforeunload,但是當url更改爲PayPal時觸發了一個,但在此之後關閉該窗口時未觸發。我如何解決這個問題?

所以,這似乎並沒有工作,我不能在這裏找到任何其他答案:

ppwin = window.open('paypal/loading.php', 'paypal_popup', 'width=900,height=500'); 
    ppwin.onbeforeunload = function(){ 
     //triggered when URL changes 
     if (ppwin.closed) // false because window is still open. 
      // Order failed 
    } 

雖然我接受了答案,我仍然無法與它statisfied。它的工作原理,但就是這樣。如果有人提供更好的答案,我會更加快樂!

回答

2

我遇到了同樣的問題,最後我做的是定期做父窗口檢查彈出窗口是否關閉。任何替代解決方案都讓我瘋狂。

的代碼可能是這樣的:

// Create popup window 
var popup = window.open('http://www.google.com'); 

// Set interval to check if it has been closed 
var windowCheckInterval = setInterval(function() { windowCheck(); }, 300); 

// Check function 
function windowCheck() { 
    if (!popup || popup.closed) { 
     clearInterval(windowCheckInterval); 

     // Do something 
    } 
} 

儘管這是一個相當粗魯的解決方案,用戶體驗相當不錯,編程是非常簡單的。

您必須記得清除進程以不同方式完成時的時間間隔(不僅僅是當窗口關閉時),還有任何時間間隔。

+0

好吧,我也想到了這一點,但我並不喜歡它。 「任何替代方案都讓我瘋狂。」什麼替代方案 –

+0

我試過'popup.onclose','popup.onunload',...但他們都沒有工作。此外,您無法控制彈出窗口的行爲,因爲它不是您的代碼(您提到過在那裏打開了PayPal)。也許有更好的解決方案比設置時間間隔更好,但我什麼都不知道。 :-( –

+0

好的,謝謝,我得去用它 –

0

看到Capture the close event of popup window in JavaScript

只要你能趕上它的彈出窗口的URL是在同一個域中的父母。 否則請嘗試「最好的辦法是在域中打開一個文檔,然後將遠程URL加載到iframe中,或者通過服務器腳本將其讀入並從此處進行渲染。」

+0

我已經說過它不是一個域。因此,你的答案仍然是無用的 –

+0

你可以說它是無用的,因爲它不能解決你的問題,但如果你的問題是不能在一個特定的工具/環境中完成的,那麼回答這個問題是不可能的,答案也許接受瀏覽器行爲的安全限制是一個合適的解決方案,否則你一直在等待並尋找一個不存在的解決方案; – roel

+0

重點是,你回答的問題有一個矛盾的答案,我說它不是同一個域名,你給同一個域名的答案。 –

相關問題