Как избежать блокировки всплывающих окон, вызванной обещанием в обработчике кликов - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть кнопка, которая должна извлекать данные по щелчку перед вызовом сторонней библиотеки, которая в конечном итоге открывает всплывающее окно.

Проблема в том, что она работает в Chrome, но не работает в Firefox иSafari, потому что всплывающее окно блокируется их блокировщиками всплывающих окон.

Избегайте блокировщиков всплывающих окон браузера содержит обходной путь, однако он не работает для меня, потому что я не создаю экземплярыСам всплывающее окно (сторонняя библиотека)

Есть ли способ заставить 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>

РЕДАКТИРОВАТЬ: я использую Firefox 70.0.1 на MacOS Mojave (10.14.6)

РЕДАКТИРОВАТЬ: обновить, чтобы исправить утверждения, что этоработал в Safari, он не

РЕДАКТИРОВАТЬ: работает в Opera 64

...