我有一个http窗口,打开一个安全的弹出框,将表单提交给第三方网站。弹出窗口关闭后,我想重新加载开启器,以便它反映表单提交的结果。
由于opener和popup使用不同的协议(http和https),我不能以简单的方式(window.opener.location.reload())来完成。还有另外一种方法吗?我是否必须冒险进入JSONP?
答案 0 :(得分: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 :(得分: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更新数据或重新加载页面。