javascript - 为什么 Chrome 在重定向时阻止打开新标签?

标签 javascript google-chrome

我有一个带有特定链接的 react 应用程序。当用户单击链接时,它会打开一个新选项卡,并将当前页面重定向到主页。这就是我在 handleClick 函数中所做的事情:

window.location.href = '/';
const win = window.open('https://google.com', '_blank');
win.focus();

但是当我这样做时,Chrome 会阻止弹出窗口。由于重定向也会发生,因此弹出窗口被阻止的消息也会消失。但有趣的是,当我更改顺序时它会起作用,如下所示:

const win = window.open('https://google.com', '_blank');
window.location.href = '/';
win.focus();

知道为什么会发生这种情况吗?我浏览了文档,但找不到任何内容。我只是想确保第二种方法始终有效,并且 Chrome 将来不会停止阻止它。

要快速尝试此操作,您可以在 Chrome 控制台中按两个顺序执行以下两行:

window.location.href = 'https://yahoo.com';
window.open('https://google.com', '_blank');

最佳答案

当您将 window.location.href = '/'; 放在 window.open 之前时,浏览器已经加载新请求的页面,并卸载当前页面,因此该语句之后的任何脚本语句可能会也可能不会运行。这可能是您收到弹出窗口的原因。

但是在第二种情况下,window.open 首先正常运行,就像任何其他 JS 语句一样,然后重定向触发。

关于javascript - 为什么 Chrome 在重定向时阻止打开新标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57567772/

相关文章:

javascript - 如何判断日期字符串是否包含已在 Javascript 中添加的时间偏移量?

Javascript 适用于 chrome,但不适用于其他浏览器

firefox - css3 不会在 w3c valdidator 中验证

javascript - 通过 chrome 扩展将变量传递到当前选项卡

javascript - 无法让 Android 设备成为 Worklight 应用程序部署的目标

javascript - JSON 响应作为文件打开,但我无法使用 JavaScript 访问它

javascript - 在下拉菜单中选择特定元素时如何启用文本区域?

javascript - 如何从一个js文件访问另一个js文件中的对象?

html - Chrome 53 中的 <select> 高度

javascript - 使用 PageY 和 ClientY 鼠标位置的差异结果