Существует ли всплывающее окно?(JavaScript) - PullRequest
2 голосов
/ 29 марта 2011

Я пытаюсь определить, существует ли всплывающее окно в JavaScript.Я знаю его имя (передано в window.open()), но у меня нет ссылки на окно.Например, рассмотрим это: у меня есть веб-страница A, которая вызывает window.open('url', 'popup'), и у меня есть веб-страница B, которая также хочет вызвать window.open('url', 'popup'), если такое всплывающее окно не существует.В этом случае B просто фокусируется на всплывающем окне.Таким образом, веб-страница B не имеет ссылки на всплывающее окно (и не может иметь, мы можем предположить, что A и B независимы).Есть ли способ сделать это?

1 Ответ

3 голосов
/ 29 марта 2011

Вы должны быть в состоянии сделать это, если поэкспериментируете со своей оконной структурой.

Всякий раз, когда я сталкивался с этой проблемой, у меня было главное окно, которое всегда существует. Затем при вызове window.open я беру обработчик, который возвращает эта функция, и затем назначаю его главному окну, которое, как я знаю, будет существовать всегда.

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

Итак, при условии, что у вас есть это главное окно, которое всегда существует (вы всегда можете использовать окно, в котором используется рамка для отображения вашего реального контента, поэтому для ваших пользователей оно будет выглядеть одинаково), вы можете сделать что-то вроде :

var mainWindow = window;

while(mainWindow != mainWindow.parent){
   mainWindow = mainWindow.parent; 
}

if(mainWindow.PopupWindow === undefined || mainWindow.PopupWindow.closed){ 
  var handler = window.open('url', 'popup');
  mainWindow.PopupWindow = handler;
}

У меня всегда было несколько проблем с использованием свойства closed объекта window, поэтому вам может потребоваться сопоставить функцию с событием onunload во всплывающем окне, которое просто очищает переменную PopupWindow в mainWindow, а затем добавить эта проверка тоже в вашем операторе if.

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