Javascript 当从promise调用window.open()时,浏览器会阻止它
我有这样的代码:Javascript 当从promise调用window.open()时,浏览器会阻止它,javascript,ajax,angularjs,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中使用它时(见下文),它总是被浏览器阻止。有什么建议
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(...);
}
承诺来自角度。承诺是响应您从Ajax请求返回HTTP响应而发出的。这不是用户触发的事件,因此弹出窗口被阻止。使用用户提供的窗口,而不是创建新窗口。解决此问题的方法是
win.location
)如果我事先不知道是否需要打开弹出窗口,该怎么办?比如:
action().then(dowindopenthing).catch(dosomethingelsethattodesntopenapopup)
所以如果以后我不再使用它,我就不能打开一个窗口(保留它的引用等),对吗?@luiz一个老套的解决方案可能是打开那个窗口,如果不需要的话关闭它。但我会寻找一种基于人体工程学的解决方法,例如,进行可能会失败的查询,然后显示一个对话框“the thing worked,you want to view the result in a new window?”。另外两个答案更好,应该被接受,而不是说您不能这样做的答案。
var newTab = $window.open('', '_blank');
promise
.then(function () {
var url = '...';
newTab.location.href = url;
});