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

时间:2014-04-25 08:26:08

标签: 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');

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

action().success(function (r) {
  // window.open(...);
}

承诺来自棱角分明。

3 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:13)

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

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

答案 2 :(得分:6)

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