2010-08-10 197 views
0

我有一個http窗口打開一個安全彈出窗口提交表單到第三方網站。彈出窗口關閉後,我想重新加載開啓者,以便它反映表單提交的結果。由於開啓者和彈出使用不同的協議(http和https),我不能以直接的方式(window.opener.location.reload())來完成。有另一種方法嗎?我必須冒險進入JSONP嗎?如何從https彈出窗口重新加載http window.opener?

回答

1

我知道,這是一個超級老問題,但我發現了一個更好的辦法來做到這一點:Cross-document messaging

$('a#popup').on('click', function(event) { 
    event.preventDefault(); 
    $this = $(this); 
    authenticationWindow = window.open($this.href, 'authenticationPopup'); 
}); 

window.addEventListener('message', function (evt) { 
    // simplified, should check for matching event.origin 
    if (event.data == 'OK' && event.origin == window.location.protocol+'//'+window.location.host) { 
     authenticationWindow.close(); 
    } 
}); 

雖然從彈出(當然,如果你控制它,在至少在過去的頁面),你需要這樣的:

opener.postMessage('OK', window.location.protocol+'//'+window.location.host); 

這將通過Ajax關閉彈出,並允許你做其他的東西,以及像更新數據或重新加載頁面。

+0

注意:event.origin必須匹配opener.postMessage的第二個參數 – mcdado 2017-03-19 15:05:42

2

Kludgy方式:設置超時以檢查打開的彈出窗口是否關閉。

function checkClosed(){ 
    if(new_win.closed){ 
     alert('Window was closed'); 
    } 
    else{ 
     window.setTimeout(checkClosed,1000); 
    } 
} 

new_win = window.open('about:blank'); 
window.setTimeout(checkClosed,1000);