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



我有这样的代码:

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

当从任何代码位置调用时,这都可以很好地工作,但当我承诺使用它时(见下文),它总是被浏览器阻止。有什么建议吗?

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

承诺是有的放矢的。

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

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

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

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

最新更新