Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать открыто ли окно, есть ли коллекция окон типа frames[] 
V
    Опции темы
aazon
Дата 29.6.2006, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 15.4.2005

Репутация: нет
Всего: нет



У меня есть дочернее окно, открытое скриптом, и есть фрейм в главном окне. Как фрейм должен обращаться к дочернему окну? Конкретно, нужно проверить, существует ли оно, если нет, то открыть такое же, еcли да - то ничего не делать.

Открытие окна (из фрейма):
Код

var path='index.php';
var dwin=top.window.open(path,'dwin', "width=700,height=200,left=200,top=100,scrollbars");
dwin.focus();


тоесть имя окна, как я понимаю, dwin. Теперь нужно сделать обращение из фрейма в это окно. KAK??? 
PM WWW ICQ   Вверх
Aliance
Дата 30.6.2006, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



По переменной:
Код

var path = 'index.php';
var dwin = top.window.open(path, 'dwin', "width=700,height=200,left=200,top=100,scrollbars");
if (dwin) {
   // окно dwin существует
   dwin.focus();
}


Полезно почитать: http://forum.vingrad.ru/index.php?showtopic=44559 
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 30.6.2006, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Aliance, if не нужен, окно всегда будет открыто.

aazon, открывай окна с именами, при повторном открытии существующее окно перезагрузиться. И наоборот, открывай окна _blank|_new если нужно при каждом open открывать новое окно. 

По теме: нет такой колекции. 


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
aazon
Дата 30.6.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 15.4.2005

Репутация: нет
Всего: нет



Мне нужна проверка на существование окна ДО открытия нового такого же. Ситуация такая:
1. Если дочернего окна нет, оно открывается и в него загружается, допустим, a.php
2. Далее пользователь в дочернем окне может нажать на кнопку, и в дочернее окно загрузится b.php.
3. И вот теперь скрипт из фрейма должен помотреть, открыто ли уже дочернее окно. Если нет - то открыть и загрузить в него a.php, а если да, то ничего не делать!

Твое решение не удовлетворяет п.3, сначала НОВОЕ окно открывается (а если было открыто, то явно изменяется УРЛ), и только потом идет проверка. Мне же нужно проверку производить ДО открытия. Пробовал менять строки местами, но такой вариант не работает:
Код

if (dwin)
{
    alert('window exists');
}
else
{
    path='index.php';
    var dwin=top.window.open(path,'dwin', "width=700,height=200,left=200,top=100,scrollbars");
    dwin.focus();
}

 
PM WWW ICQ   Вверх
Sardar
Дата 2.7.2006, 03:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Тогда никак. Задача специфичная, не думаю что кто либо сталкивался, но вполне возможно что через XPCOM в мозилле либо какой-нибудь фичей в ИЕ можно получить список окон.

Вопрос остаёться открытым. 


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Иль
Дата 19.7.2006, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

Репутация: 2
Всего: 14



Sardar
Цитата(Sardar @  30.6.2006,  11:00 Найти цитируемый пост)
Aliance, if не нужен, окно всегда будет открыто.

if обязательно нужен, иначе при блокировании всплывавющих окон (в ИЕ 6.0 проверено)
dwin.focus() будет выкидывать исключение, тк dwin=null
(про try умолчу) 


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
zoidberg
Дата 20.7.2006, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.7.2006

Репутация: нет
Всего: 0



Цитата(aazon @ 30.6.2006,  11:07)
Мне нужна проверка на существование окна ДО открытия нового такого же.

А чем этот код не подходит?
Код

<script type="text/javascript">
    var dwin;
    var path = "frame1.html";
    if (!dwin) {
        dwin = top.window.open(path, 'dwin', "width=700,height=200,left=200,top=100,scrollbars");
        dwin.focus();
    }
</script>
 
PM MAIL   Вверх
Sardar
Дата 20.7.2006, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



zoidberg, тем что это не проверка, а открытие окна. 


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
zoidberg
Дата 20.7.2006, 03:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.7.2006

Репутация: нет
Всего: 0



Но в начале dwin = undefined! Т.е проверка есть... вот например скрипт откроет только 1 окно:
Код

<script type="text/javascript">
    var dwin;
    var path = "frame1.html";
    function openit() {
     if (!dwin) {
        dwin = top.window.open(path, 'dwin', "width=700,height=200,left=200,top=100,scrollbars");
        dwin.focus();
     } else alert("It's already open!")
    }
    openit();
    openit();
</script>

Я так и не понял, что хочет автор. Если пытается отловить нажатие на крестик (закрытие окна, то такого события нет. кросс-браузерно - однозначно нет). 
К чему все это?
Цитата

1. Если дочернего окна нет, оно открывается и в него загружается, допустим, a.php

А в какой ситуации его может не быть? Блокировка поп-апов? Тогда хоть голову разбей, но не открыть его.
Цитата

2. Далее пользователь в дочернем окне может нажать на кнопку, и в дочернее окно загрузится b.php.

Ну если у пользователя не блокируются окна, то проблемы тут не возникнут.
Цитата

3. И вот теперь скрипт из фрейма должен помотреть, открыто ли уже дочернее окно. Если нет - то открыть и загрузить в него a.php, а если да, то ничего не делать!

Ну так! Если dwin undefined, то пусть скрипт его откроет! Но если пользователь его закроет, то это событие отловить не удастся... или, например, можно спамить дочернее окно при потере фокуса. 
зы: а может мне пора спать уже т.к я не догоняю.  smile  
PM MAIL   Вверх
Sardar
Дата 20.7.2006, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



zoidberg, проблема в том что проверка на открытие окна нужна не в течении одного и того же сеанса, а между загрузками страницы. Открыл окно, перезагрузился, проверил есть ли оно ещё. Вообще плохое то решение, которому потребуеться знать открыто ли окно.

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


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
aazon
Дата 21.7.2006, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 15.4.2005

Репутация: нет
Всего: нет



Окна точно не блокируются, на счет этого проблем нет
Цитата

Вообще плохое то решение, которому потребуется знать открыто ли окно.

Согласен, но в некоторых ситуациях приходится вносить коррективы "на лету", и поэтому возникают такие ситуации 
PM WWW ICQ   Вверх
12345c
Дата 22.7.2006, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



aazon
Цитата(aazon @  30.6.2006,  11:07 Найти цитируемый пост)
2. Далее пользователь в дочернем окне может нажать на кнопку, и в дочернее окно загрузится b.php.

может быть, вы путаете слово "окно" и "документ"? Иначе бы проблему так долго не обсуждали. Если туда загрузился b.php, то надо ли загружать a.php ?
Цитата(aazon @  21.7.2006,  15:42 Найти цитируемый пост)
Вообще плохое то решение, которому потребуется знать открыто ли окно.
Звучит красиво, если не вдуматься, что во всех межоконных действиях нужно проверять, открыто ли окно.

Ещё тут все забыли, что если пользователь или программа закрыли окно, то dwin остаётся существовать, только dwin.closed==true .

Поэтому, если точно по вопросу, то решение

Код
if(!self.dwin||dwin.closed)открыть_окно;


Но я догадываюсь, что aazon-у нужно ещё то ли нестирание b.php, то ли незагрузка a.php второй раз, если оно уже в окне. Уточните.

Обращение из фрейма к окну - как обычно. dWin определено во фрейме - обращаться надо в общем случае top.frames['имя'].dwin . Из фрейма - можно просто dWin. 


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1344 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.