Javascript 为什么浏览器会阻止回调中的弹出窗口而不是其他窗口

Javascript 为什么浏览器会阻止回调中的弹出窗口而不是其他窗口,javascript,angularjs,Javascript,Angularjs,奇怪的行为-我试图在回调中打开一个新窗口-使用Angular,但可能是一般的JS问题 如果我这样做: $window.open('http://google.com', '_blank'); 它很好用。但是,这并不是因为我的浏览器阻止了它-我正在使用Safari 7并已选中阻止弹出窗口: Items.list(function(items) { $window.open('http://google.com', '_blank') }); 为什么浏览器会阻止这一点而不是另一个,我如何才能

奇怪的行为-我试图在回调中打开一个新窗口-使用Angular,但可能是一般的JS问题

如果我这样做:

$window.open('http://google.com', '_blank');
它很好用。但是,这并不是因为我的浏览器阻止了它-我正在使用Safari 7并已选中阻止弹出窗口:

Items.list(function(items) {
  $window.open('http://google.com', '_blank')
});

为什么浏览器会阻止这一点而不是另一个,我如何才能避免这一点?我使用了setTimeout以及一些SO post建议,在调用async之前将$window.open分配给一个变量,但在这里不起作用。

弹出窗口阻止程序逻辑通常会在用户操作(如单击)直接导致弹出窗口未打开时阻止弹出窗口

异步发生的回调并不是用户操作的直接结果—它是在稍后的某个时间发生的,并且没有直接连接到浏览器看到的该操作,因此浏览器可能不允许它


通常的解决方法是,作为用户操作的直接结果,立即打开弹出窗口,然后在异步回调发生且内容可用后填充其内容。

angular 6是否支持类似javascript的弹出窗口?我不是在寻找模态窗口解决方案。我希望能够移动窗口到另一个屏幕,就像你可以做的JavaScript弹出窗口。有关于这方面的文件吗?如何在Angular 5/6 ie上打开一个弹出窗口

很好。我打开了一个空白窗口,var wnd=$window.open,\u blank;然后在我的回调中写入一个字符串,在我的例子中生成一个pdf,wnd.document.location.href=string;