У меня проблемы с открытием окна новой вкладки через некоторое время.Я сделал 2 разных эксперимента.В первом эксперименте я использовал функцию setTimeout(...)
, а во втором эксперименте я использовал пользовательскую функцию sleep(...)
.
Эксперимент 1:
В этом эксперименте обабраузеры: Chrome
и Firefox
ведут себя одинаково.При установке числа, большего или равного 2000 миллис, окно новой вкладки блокируется.Если используется 1000 миллис или меньше, то окно вкладки открывается правильно.Пожалуйста, примите эти цифры как приблизительные (мои реальные эксперименты).
...
$('.button_test').click(() => {
setTimeout(() => {
let newForm = $('<form>').attr({
method: 'GET',
action: 'https://www.google.com/search',
});
$('<input>').attr({
type: 'hidden',
name: 'q',
value: 'Steve Jobs',
}).appendTo(newForm);
let new_win_content = `<html><head><title>Auxiliar Tab</title></head><body></body></html>`;
let new_win = window.open();
new_win.document.write(new_win_content);
new_win.document.close();
let $body = $(new_win.document.querySelector('body'));
$body.append(newForm);
newForm.submit();
document.location.href = popunderURL;
}, 1000); // IF >= 2000 -> TAB WINDOW GETS BLOCKED ( CHROME, FIREFOX, etc.)
});
...
Вот вам живой пример:
https://jsbin.com/gimofah/1/edit?html,output
Эксперимент 2:
В этом эксперименте, где я использую пользовательскую функцию: sleep(...)
, новое окно вкладок блокируется только на Chrome
, когда время ожидания больше или равно 1000 миллис (на мойэксперименты).
...
$('.button_test').click(() => {
sleep(900); // IF >= 1000 -> POPUP WINDOW GETS BLOCKED ON CHROME (FIREFOX IS OK)
let newForm = $('<form>').attr({
method: 'GET',
action: 'https://www.google.com/search',
});
$('<input>').attr({
type: 'hidden',
name: 'q',
value: 'Steve Jobs',
}).appendTo(newForm);
let new_win_content = `<html><head><title>Auxiliar Tab</title></head><body></body></html>`;
let new_win = window.open();
new_win.document.write(new_win_content);
new_win.document.close();
let $body = $(new_win.document.querySelector('body'));
$body.append(newForm);
newForm.submit();
document.location.href = popunderURL;
});
...
function sleep(miliseconds) {
var currentTime = new Date().getTime();
while (currentTime + miliseconds >= new Date().getTime()) { }
}
https://jsbin.com/ladedup/1/edit?html,output
Мой вопрос: Есть ли у вас какие-либо идеи о причине этого ?, может быть, один изследующий ...
- истекшее время между моментом взаимодействия пользователя с браузером и запросом открытия окна вкладки, или
- потоком скрипта, или
- любая другая причина?