为什么 open link 在 iPad Safari 上的异步处理程序中不起作用?
Why open link is not working inside a async handler on iPad Safari?
这里有一些关于以编程方式打开 _blank link 的奇怪的事情。
环境:
- 设备:iPad14
- 浏览器:Safari 最新
一个按钮正在处理异步等待操作,然后触发打开一个 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 并且必须等待异步操作它。)
这里有一些关于以编程方式打开 _blank link 的奇怪的事情。
环境:
- 设备:iPad14
- 浏览器:Safari 最新
一个按钮正在处理异步等待操作,然后触发打开一个 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 并且必须等待异步操作它。)