为什么 open link 在 iPad Safari 上的异步处理程序中不起作用?

Why open link is not working inside a async handler on iPad Safari?

这里有一些关于以编程方式打开 _blank link 的奇怪的事情。

环境:

一个按钮正在处理异步等待操作,然后触发打开一个 link 作为 _blank 目标。我不确定为什么它不起作用。

<button onClick={async () => {
  // handling some await heavy operation
  // await until it succeed
  window.open('some url', '_blank'); // this is not working
} />

欢迎提出任何建议!

如果调用不能直接与用户交互(例如点击等)相关联,浏览器往往会阻止 window.open。通过引入 any 异步内容,您正在破坏这种直接连接。对于浏览器来说,这现在看起来是一样的,就好像你试图在没有任何用户交互的情况下打开这个弹出窗口一样 - 这是垃圾广告弹出窗口的典型标志,因此它被阻止了。

您基本上只能在单击按钮时直接打开弹出窗口 - 然后稍后更改弹出窗口中加载的 URL,如果这取决于您的异步操作的结果。 (打开弹出窗口并清空 URL 或 about:blank 通常有效,如果您在单击按钮时没有真正的目标 URL 并且必须等待异步操作它。)