Не удается открыть дочернее окно в том же блоке даже с помощью setTimeout - PullRequest
1 голос
/ 04 апреля 2019

Вот пример проблемы:

Если я открою консоль и введу следующий код в виде одного блока:

var existingWin = window.open('', 'footerContent'); 
existingWin.close();
var existingWin = window.open('', 'footerContent')

первый вызов window.open и window.close работает, но второй вызов window.open не работает. Даже если я задержу его, чтобы сначала закрыть окно:

var existingWin = window.open('', 'footerContent'); 
existingWin.close();
setTimeout(function() {var existingWin = window.open('', 'footerContent')}, 3000) 

это не работает. Но если я выполню только первые две строки:

var existingWin = window.open('', 'footerContent'); 
existingWin.close();

и затем отдельно введите:

var existingWin = window.open('', 'footerContent'); 

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

Это вызывает у меня проблемы в модульном тесте, который я строю. Может кто-нибудь помочь мне понять, почему это происходит и есть ли способ обойти это? Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 04 апреля 2019

Чтобы открыть несколько окон, вам необходимо указать уникальное второе имя, как показано ниже.

var existingWin = window.open('', 'footerContent'); 

var existingWin = window.open('', 'footerContent1');

var existingWin = window.open('', 'footerContent2');

Подробности можно посмотреть здесь https://javascript.info/popup-windows

0 голосов
/ 04 апреля 2019

Оказывается, это была настройка блокировки всплывающих окон по умолчанию в моем браузере Chrome. Когда я изменил настройку, все заработало как надо. Спасибо Такришне за то, что он указал мне правильное направление. Но это означает, что я, вероятно, буду использовать другую стратегию и держаться подальше от дочерних окон.

0 голосов
/ 04 апреля 2019

Использование слова var инициализирует или сбрасывает переменную. Просто попробуйте без этого слова, как:

    existingWin = window.open('', 'footerContent');
...