Как гарантировать, что именованное всплывающее окно закрыто, чтобы можно было создать новое окно с тем же именем? - PullRequest
0 голосов
/ 29 июня 2010

При использовании Internet Explorer (похоже, нет проблем с FireFox) следующий код иногда вызывает

Error: Access is denied. 
Code: 0

Эта строка является вторым window.open.

currentDialog = window.open("error.html", name, "width=20 height=20 left=50 top=70", true);
if (currentDialog != null)
  currentDialog.close();

currentDialog = window.open("about:blank", name, "width=20 height=20 left=50 top=70", true);

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

currentDialog = window.open("error.html", name, "width=20 height=20 left=50 top=70", true);
if (currentDialog != null)
  currentDialog.close();

//Small delay to allow slow addons enough time to process OnLoad/OnQuit() 
var date = new Date(); 
var curDate = null; 

do { curDate = new Date(); } 
while(curDate-date < 300); 

currentDialog = window.open("about:blank", name, "width=20 height=20 left=50 top=70", true);

Не рад, что у нас есть случайный отрезок времени.

Есть ли какой-то другой способ гарантировать, что currentDialog.close(); не вернется, пока не будет должным образом утилизирован, чтобы новое окно с тем же именем могло быть успешно создано в той же функции, как показано выше?

Фон

Окно используется для отображения специального диалогового окна выбора, которое должно быть модальным. Чтобы получить модальный режим при создании окна, добавляются события onfocus и onunload, чтобы при изменении фокуса на главной странице фокус снова возвращался к диалогу выбора, а если главная страница закрывалась, то модальный диалог закрывался.

При быстром продвижении по селекторам иногда отсоединение 1-го диалога происходит после попытки перехватить 2-е диалоговое окно, и поэтому у диалога нет соответствующего модального действия.

Возможно, лучшую вещь для решения: Возможно, есть какой-то альтернативный способ получить это модальное диалоговое действие и избежать необходимости «создавать» промежуточную страницу ошибки?

1 Ответ

0 голосов
/ 25 сентября 2010

Нашел хороший простой ответ

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