2016-07-31 208 views
1

我正在研究一个基本的oauth认证原型,并且我有一个HTML(称为parent.html)打开一个子窗口来实现这个目的。子窗口将被重定向到提供商网站,然后转到我的注册页面。我的注册页面将使用JavaScript来调用window.close();关闭子窗口。为什么在Microsoft Edge中出现关闭警告?

但是当我在Microsoft Edge中尝试我的原型时,我发现每次javascript试图关闭子窗口时都会收到警告。我测试了其他使用弹出窗口进行oauth身份验证的网站,比如dropbox,在完成身份验证并且子窗口即将关闭时,我没有看到相同的关闭警告。

有谁知道为什么(以及在什么情况下)Edge显示此警告对话框?任何信息将是有用的和赞赏。谢谢。

Screenshot of the close warning

+0

谁/是什么打开了此窗口的警告?你或JavaScript? – acdcjunior

+0

您只能使用window.open打开的JavaScript自动关闭窗口。 –

+0

子窗口是由parent.html使用child = window.open()打开的,但是在一些重定向之后,子窗口失去了window.opener引用,并且父窗口也失去了子引用。不知道这是否是原因。 –

回答

0

这是因为弹出阻断剂和自动化脚本阻滞剂特征在MS边缘的。基本上这两个功能将尝试阻止在加载页面期间无需用户操作而自动运行的任何脚本。

例如,这两个脚本将在MS边缘阻止(他们工作在IE):如果你把它们放在一个函数,从一个click事件给他们打电话

var w = window.open("page.htm"); //w will be null. 

window.close(); //displays a warning. 

相同的两条线将工作例如,按钮。


解决方案:

创建在主窗口的功能关闭弹出窗口,在弹出的窗口中调用该函数,并将它传递给弹出窗口的引用:

// in main window 
function closePopup(w) { 
    w.close(); 
} 

// in popup window 
opener.closePopup(this); 
相关问题