为什么浏览器会在回调中阻止弹出窗口,但不会阻止弹出窗口

 奈何为人非_800 发布于 2023-02-06 19:47

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

如果我这样做:

$window.open('http://google.com', '_blank');

它工作正常.然而,这不是因为它被我的浏览器阻止 - 我正在使用Safari 7并检查了"阻止弹出窗口":

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

为什么浏览器会阻止而不阻止另一个,我该如何规避?我玩setTimeout以及一些SO帖子建议在调用异步之前将$ window.open分配给变量但在这里不起作用.

1 个回答
  • 当弹出窗口未被打开时,弹出窗口阻止程序逻辑通常会阻止弹出窗口,这是用户操作(如点击)的直接后果.

    异步发生的回调不是用户操作的直接结果 - 它在某个时间之后并且没有直接连接到该操作(如浏览器所见),因此浏览器可能不允许它.

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

    2023-02-06 19:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有