Почему window.open () молча игнорируется, если он вызывается из цикла и через setTimeout ()? - PullRequest
0 голосов
/ 14 мая 2018

--- РЕДАКТИРОВАТЬ.

Я не понимаю; вчера это казалось проигнорированным; сейчас вроде бы работает. Даже внутри цикла и вызывается через setTimeout(). В настоящее время у меня возникают трудности с копированием вчерашнего поведения ... Что происходит?


--- 2-е РЕДАКТИРОВАНИЕ.

Первая идея, как «исправить» репликацию проблемы: странно, кажется ли, что это работает, зависит от текущего URL! Например. работает с SE-сайтов , но не с, скажем, http://www.asdf.com/. Как так?


Принимая во внимание, что setTimeout() работает здесь:

setTimeout(function(){ alert("Hello"); }, 3000);

и window.open() работает здесь:

window.open("https://www.bbc.com","_self");

и даже сочетание двух работ здесь:

setTimeout(function(){ window.open("https://www.bbc.com","_self") }, 3000);

неожиданно и неожиданно комбинация двух игнорируется в цикле:

i=0;
while(i < 100)
{
    setTimeout(function(){ window.open("https://www.bbc.com","_self") }, 3000);
    i++
}

Почему?


tldr;

Этот вопрос, кажется, уже приближался к миллиону раз, но пока (насколько я могу судить / искать) с кратким форматом вопросов и ответов; например,

Функция javascript Settimeout () игнорируется

Моделирование JavaScript метода setTimeout () «из первых принципов»

1 Ответ

0 голосов
/ 14 мая 2018

Блокировщики всплывающих окон в большинстве популярных браузеров позволяют открывать новое окно только в том случае, если оно открывается в результате выполнения кода в результате прямого действия пользователя, такого как щелчок. Поскольку setTimeout() произойдет некоторое время в будущем, это не считается прямым результатом действия пользователя, поэтому попытки открыть окна из setTimeout(), вероятно, блокируются всплывающими окнами.

По сути, попытка запустить window.open изнутри setTimeout() оставляет браузер , чтобы «думать», что это всплывающее окно, которое заслуживает (тихой) блокировки. - Если, напротив, window.open запускается сам по себе, браузер обрабатывает его как «пользовательский клик» , то есть не как спам заблокирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...