我有一個http窗口打開一個安全彈出窗口提交表單到第三方網站。彈出窗口關閉後,我想重新加載開啓者,以便它反映表單提交的結果。由於開啓者和彈出使用不同的協議(http和https),我不能以直接的方式(window.opener.location.reload())來完成。有另一種方法嗎?我必須冒險進入JSONP嗎?如何從https彈出窗口重新加載http window.opener?
0
A
回答
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關閉彈出,並允許你做其他的東西,以及像更新數據或重新加載頁面。
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);
相關問題
- 1. javascript彈出窗口和重新加載
- 2. 如何從彈出窗口找出「父窗口重載完成」?
- 3. 關閉Facebook彈出窗口並重新加載父窗口
- 4. 跨源 - 窗口彈出(window.opener爲null)
- 5. 如何重新加載彈出窗口中顯示的tableview
- 6. 從窗口彈出IE瀏覽器重新加載jqgrid 8
- 7. 重新加載從子彈出窗口的父級iframe
- 8. 彈出加載窗口
- 9. 獲取Window.Opener句柄從閃光燈內打開彈出窗口
- 10. 關閉彈出窗口後重新加載父頁面
- 11. Jquery Nyromodal:彈出窗口後重新加載頁面?
- 12. 如何將主窗口從彈出窗口重定向到URL?
- 13. Window.open重新加載窗口
- 14. 當新窗口刷新或重新加載時重新加載父窗口
- 15. 如何在關閉彈出窗口後重新加載已存在的頁面
- 16. 如何在ajax調用的成功分支上重新加載彈出窗口?
- 17. 如何使用firefox addon sdk重新加載小部件彈出窗口?
- 18. 加載彈出窗口 - Adobe Flash
- 19. 加載後關閉彈出窗口
- 20. 使窗口彈出主頁加載
- 21. 頁面加載彈出窗口
- 22. 停止子窗口重新加載,即使父窗口已重新加載
- 23. 如何刷新fancybox彈出窗口?
- 24. 從彈出窗口更新主窗口的值更新
- 25. 從彈出窗口重定向
- 26. 如何從iframe重新加載最頂層的窗口?
- 27. 從源頁面更新彈出窗口
- 28. 從彈出窗口調用JavaScript類
- 29. 使用Javascript從彈出窗口調用父窗口函數
- 30. 禁用父窗口,並重新啓用彈出窗口
注意:event.origin必須匹配opener.postMessage的第二個參數 – mcdado 2017-03-19 15:05:42