如何避免由点击处理程序中的诺言引发的弹出窗口阻止程序

我有一个按钮,需要在调用第三方库之前单击时获取数据,该库最终会打开一个弹出窗口。

我遇到的问题是,它可以在Chrome中运行,但在Firefox和Safari中无法运行,因为弹出窗口被其弹出窗口阻止程序阻止了。

Avoid browser popup blockers包含一个变通办法,但是它对我不起作用,因为我自己没有实例化弹出窗口(第三方库可以)

是否可以让Firefox和Safari识别点击> 获取(承诺)为用户发起的操作,从而不会触发弹出窗口阻止程序?

注意:包含以下代码段是为了提高可读性,但是使用StackOverflow代码段工具时,该代码段的行为不符合预期。 它可以在以下JSFiddle中复制:https://jsfiddle.net/jwrLgqs3/

function thirdPartylibraryThatOpensWindow(params) {
  window.open(params.url);
}

document.querySelector('button').addEventListener('click',async () => {
  const response = await fetch('https://dog.ceo/api/breeds/image/random');
  const data = await response.json();
  
  thirdPartylibraryThatOpensWindow({url: data.message});
});
<button>Promise Button</button>

编辑:我在MacOS Mojave(10.14.6)上使用Firefox 70.0.1

编辑:更新以修复在Safari中运行的语句,但不能运行

编辑:在Opera 64中工作

lanzhufeng22 回答:如何避免由点击处理程序中的诺言引发的弹出窗口阻止程序

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3149221.html

大家都在问