从promise调用时,window.open()被浏览器阻止

mmi*_*rek 6 javascript ajax angularjs

我有这样的代码:

window.open('https://api.instagram.com/oauth/authorize/',
'_blank',
'width=700,height=500,toolbar=0,menubar=0,location=0,status=1,scrollbars=1,resizable=1,left=0,top=0,modal=yes');
Run Code Online (Sandbox Code Playgroud)

从任何代码处调用时都可以正常工作,但是当我在promise中使用它时(见下文),它总是被浏览器阻止.有什么建议?

action().success(function (r) {
  // window.open(...);
}
Run Code Online (Sandbox Code Playgroud)

承诺来自棱角分明.

小智 15

            var newTab = $window.open('', '_blank');
        promise
            .then(function () {
                var url = '...';
                newTab.location.href = url;
            });
Run Code Online (Sandbox Code Playgroud)


Den*_*ret 13

我用来解决这个问题的方法是

  1. 立即打开窗口并保留一个引用(当它合法时,即在事件处理程序中)
  2. 启动异步操作
  3. 然后,在承诺中,使用您打开的窗口并填充它(您可以使用win.location)


Que*_*tin 6

响应您从Ajax请求返回HTTP响应时,将触发promise.这不是用户触发的事件,因此弹出窗口被阻止.使用用户提供的窗口而不是创建新窗口.