Javascript 如何从https弹出窗口重新加载http window.opener?

Javascript 如何从https弹出窗口重新加载http window.opener?,javascript,http,https,cross-domain,xss,Javascript,Http,Https,Cross Domain,Xss,我有一个http窗口,可以打开一个安全的弹出窗口,向第三方网站提交表单。关闭弹出窗口后,我想重新加载打开程序,以便它反映表单提交的结果 由于opener和popup使用不同的协议(http和https),因此我无法以简单的方式(window.opener.location.reload())完成。还有别的办法吗?我必须冒险进入JSONP吗?笨拙的方式:设置超时以检查打开的弹出窗口是否关闭 function checkClosed(){ if(new_win.closed){

我有一个http窗口,可以打开一个安全的弹出窗口,向第三方网站提交表单。关闭弹出窗口后,我想重新加载打开程序,以便它反映表单提交的结果


由于opener和popup使用不同的协议(http和https),因此我无法以简单的方式(window.opener.location.reload())完成。还有别的办法吗?我必须冒险进入JSONP吗?

笨拙的方式:设置超时以检查打开的弹出窗口是否关闭

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);

笨拙的方式:设置超时以检查打开的弹出窗口是否关闭

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);

我知道这是一个非常古老的问题,但我找到了一个更好的方法:

在弹出窗口中(当然,如果您控制它,至少在最后一页),您需要:

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

这将关闭弹出窗口,并允许您执行其他操作,例如通过Ajax更新数据或重新加载页面。

我知道这是一个非常古老的问题,但我找到了一个更好的方法:

在弹出窗口中(当然,如果您控制它,至少在最后一页),您需要:

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

这将关闭弹出窗口,并允许您执行其他操作,如通过Ajax更新数据或重新加载页面。

NB:event.origin必须与opener.postmessagen的第二个参数匹配b:event.origin必须与opener.postMessage的第二个参数匹配