JS: единственное открытое окно

K
На сайте с 12.07.2006
Offline
295
Kpd
564

Нужно сделать так, чтобы открываемое через JS окно было единственным, т.е. при повторном клике по кнопке/ссылке не открывалась копия окна, а открытое ранее окно становилось активным.

Делаю это так

var openedWindow = null;

function openWindow()
{
if (openedWindow) {
openedWindow.focus();
} else {
openedWindow = window.open(...)
}
}

Недостаток - если окно было открыто. а потом закрыто, то openedWindow.focus() по понятным причинам вызывает ошибку. Как сделать проверку, открыто ли открытое ранее окно? Или есть более простой способ создания единственного экземпляра окна?

N
На сайте с 15.08.2007
Offline
5
#1

Рискну предположить, что событие onunload в документе, который откроется в попапе, с задачей справится:

<html>

<body onunload="window.opener.openedWindow = null; ">
...
</body>
</html>
K
На сайте с 12.07.2006
Offline
295
Kpd
#2
nopox:
onunload="window.opener.openedWindow = null; "

Opera такое событие не знает :(

ixRock
На сайте с 14.11.2006
Offline
46
#3

Kpd, здрасти))

для этого уже есть встроенные возможности JS...

win_x = window.open('http://dfsdf', 'window_name', 'params');

так вот вся соль как раз в "window_name"...

Работаю [S]за еду и секас[/S] с XHTML, CSS, XSLT, JS, PHP. Если что, вот тут (http://www.mintdesign.ru/) некоторые мои работы. Контакты: ася 344-ноль86-276, мыло ixrock@gmail.com
K
На сайте с 12.07.2006
Offline
295
Kpd
#4
ixRock:
для этого уже есть встроенные возможности JS...

Во, значит я изобрел велосипед :D

var openedWindow = null;

function openWindow()
{
if (openedWindow && !openedWindow.closed) {
openedWindow.focus();
} else {
openedWindow = window.open(...)
}
}

Решение лучше стандартного свойства тем. что popup-окно становится активным.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий