setTimeout не задерживает self.close() в Chrome

#javascript #google-chrome #google-chrome-extension

#javascript #google-chrome #google-chrome-расширение

Вопрос:

Следующий код предназначен для закрытия всплывающего окна расширения Google Chrome через 3 секунды после отправки пользователем формы.

 function closeIt() {
    self.close();
}

$('#logForm').html('<h2>Bookmark Added</h2>');
setTimeout(closeIt,3000);
  

Если я вызываю self.close () сам по себе в потоке кода, он работает должным образом, чтобы закрыть всплывающее окно. Однако в приведенном примере он, похоже, вообще не выполняется и не показывает задержки перед обновлением всплывающего окна.

Я попытался немного поэкспериментировать с предупреждением, только чтобы обнаружить, что предупреждения, по-видимому, мешают подсчету времени ожидания… Я также пытался использовать «closeIt» с кавычками, но безрезультатно.

ОБНОВЛЕНИЕ: Спасибо за помощь! Всплывающее окно закрывается следующим кодом, но задержки вообще нет. Код включен в функцию, которая выполняется при отправке формы. Просто чтобы исключить проблему с функцией close, являющейся проблемой, я также попытался использовать $ (‘#logForm’).css(‘border’, ‘3px double red’); вместо self.close(), чтобы посмотреть, будет ли задержка и выполнение, но этого не произошло.

 function closeIt() {
    self.close();
}

$('#logForm').html('<h2>Bookmark Added</h2>');
setTimeout(function() {closeIt();} ,3000);
  

Комментарии:

1. self Указывает на правильную вещь?

2. @alex — Оно тоже появляется … оно закрывает всплывающее окно.

Ответ №1:

Используйте следующее

 window.onload = function()
        {
            setTimeout(function(){
                window.close()
            },3000);
        }
  

Комментарии:

1. OP правильно передает ссылку на функцию в setTimeout, иначе ваш closeIt() будет выполнен сразу.

2. затем оберните это другой функцией: setTimeout(function(){ closeIt(); }, 3000);

3. В данный момент код выполняется внутри функции, подобной: $(«#logForm»).submit(функция(){ //код });