Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何关闭具有跨域url的身份验证弹出窗口?_Javascript_Popup_Cross Domain - Fatal编程技术网

Javascript 如何关闭具有跨域url的身份验证弹出窗口?

Javascript 如何关闭具有跨域url的身份验证弹出窗口?,javascript,popup,cross-domain,Javascript,Popup,Cross Domain,我按照这个问题的公认答案来解决我的问题。这段代码工作得很好,但在一个用例中失败了:弹出窗口url没有从其他域更改到您自己的域,它只是在自己的域上重定向,就像您尝试验证facebook或其他社交网络上的第三个paty应用程序一样,它只是自己重定向,正如您前面已经验证的那样。我们如何在以下代码中处理此场景: 主要的 window.addEventListener(“消息”,函数(ev){ 如果(ev.data.message==“deliverResult”){ 警报(“结果:+ev.data.

我按照这个问题的公认答案来解决我的问题。这段代码工作得很好,但在一个用例中失败了:弹出窗口url没有从其他域更改到您自己的域,它只是在自己的域上重定向,就像您尝试验证facebook或其他社交网络上的第三个paty应用程序一样,它只是自己重定向,正如您前面已经验证的那样。我们如何在以下代码中处理此场景:


主要的
window.addEventListener(“消息”,函数(ev){
如果(ev.data.message==“deliverResult”){
警报(“结果:+ev.data.result”);
ev.source.close();
}
});
函数Go(){
var child=window.open(“child.html”,“_blank”,“height=200,width=200”);
var leftDomain=false;
var interval=setInterval(函数(){
试一试{
if(child.document.domain===document.domain)
{
if(leftDomain&&child.document.readyState==“完成”)
{
//当子窗口返回到我们的域时,我们就在这里
间隔时间;
警报(“返回:“+child.document.URL”);
postMessage({message:“requestResult”},“*”);
}
}
否则{
//永远不要接触到这个代码,
//当x站点安全检查抛出
//但以防万一
leftDomain=true;
}
}
捕获(e){
//当子窗口被导航离开或关闭时,我们就在这里
如果(子项关闭){
间隔时间;
警报(“关闭”);
返回;
}
//导航到另一个域
leftDomain=true;
}
}, 500);
}
去

考虑到您的评论,我认为没有一个好的、通用的解决方案,这与您链接的答案不同

解决此问题的愚蠢尝试可能是使用计时器并轮询子窗口及其所有子帧的值
document.documentElement.innerHTML


如果整个结构在相当长的一段时间内保持稳定(即HTML没有变化,也没有抛出异常),这可能表明所有内部导航或XHR调用都已完成,可以关闭窗口。

如果我正确理解了您的问题。。。如果子窗口没有导航回与其父窗口相同的原始域,我认为您无法关闭它或以其他方式与它通信。那将是一个安全漏洞。&不,我想我不能正确地解释这个问题。这种情况是,从一个域到另一个域,然后再回到同一个域,没有实际的更改。不知何故,发生了一些重定向。如果您使用类似facebook的社交网络登录,那么首先弹出窗口的工作方式与代码中的预期完全相同。但第二次,并没有实际的重定向到facebook。只是一些内部重定向可能基于cookies,最终重定向到应用程序中配置的最终重定向url。现在,这样的代码无法工作,因为域中没有正在发生的实际更改。我该如何解决这个问题。在这种情况下,窗口将保持打开状态。您知道我将如何适应现有功能的这种变化吗?还有,这会导致开销增加吗?@dark_shadow,这是我能帮到的。编写这种逻辑应该很简单——但正如我所说的——它可能根本不适用于您的特定情况。请随意尝试并发布您的版本。如果您以合理的间隔(例如250毫秒)进行投票,则开销应该无关紧要。