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