Код: Выделить всё
window.open("https://example.com/", "_blank", "")
< /code>
можно использовать для определения того, было ли заблокировано всплывающее окно; Как указано в MDN < /p>
nullИтак, как вы все еще можно определить, если всплывающее окно (например, открытие новой вкладки).
Код: Выделить всё
window.open("https://example.com/", "_blank", "noopener")`
< /code>
Учитывая, что он всегда возвращает null < /code>?
(тестируется в Chrome и Firefox, год 2025) < /sub> < /p>
Документация MDN не охватывает этот случай, поэтому я боюсь, что это может быть ошибка /дизайн. Уточните ожидаемый вариант использования, для того, чтобы функциональность веб-приложения было типично, если какие-либо попытки перемещаться с пользователем на другую страницу/домен. Критические части пользовательского потока могут потребовать, чтобы разработчики справились с любой неудачей, отображая предупреждение пользователю и обучая их, как разрешить всплывающие окна для текущего сайта в их браузере. /> [*] Последний обновленный ответ в [b] 2018 [/b] , принятый в: Как я могу обнаружить, блокирует ли браузер всплывающее окно? window.opener
Workaround 1 - Prevent Popup Blocking:
This answer suggests a workaround, similar to what an the article Overcoming popup blocking issues (2023) also describes:
function dynamicallyCreateAnchorAndNavigate(url) {
let a = document.createElement('a');
a.href = url;
a.target = "_blank"
// Note: target="_blank" implies rel="noopener" behavior as per https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/a#browser_compatibility
a.rel = "noopener"
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}
обходной путь 2 - перенаправить из безопасного домена:
Мы могли бы открыть новую страницу на одном и том же доменем, что мы не используем no ash ase as as as as as as as as are as as as are is as as are is as as are is as as as as as as as as as as as as as as as as as as as as as as as are is as ke as kin op in as kno op. Избегайте нарушения UX) может выполнить перенаправление, используя , который также требует обходного пути от вопроса
Код: Выделить всё
location.hrefКод: Выделить всё
setTimeout(() => window.location.href="https://example.com/", 0);
< /code>
Возможный ответ с использованием Window API: < /h3>
Этот ответ от @t3-rry предлагает открыть пустую страницу, удаление ссылки на открытие, а затем перенаправление новой страницы.const newWindow = window.open();
newWindow.opener = null;
newWindow.location = "https://example.com/";
Код: Выделить всё
const popupTestWindow = window.open();
const isPopupBlocked = !popupTestWindow || popupTestWindow.closed || typeof popupTestWindow.closed == 'undefined';
if (!isPopupBlocked) {
popupTestWindow.close();
const newWindow = window.open("https://example.com/", '_blank', 'noopener');
// Retry checking a blocked popup if needed
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... ing-window
Мобильная версия