Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / JavaScript - Разрешение отклонено / 3 сообщений из 3, страница 1 из 1
18.04.2007, 23:13
    #34471292
msqrt84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript - Разрешение отклонено
Привет!

Есть задачка, заключающаяся в автоматическом закрытии дочерних окон при закрытии родительского окна. При загрузке дочернего окна запускается таймер:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
function timedClose()
{
     if (child != null)
          if (child == "true")
          {
               try
               {
                    if (window.opener.closed)
                    window.close();                        
               }
               catch(err)
               {
                    alert("Ошибка! " + err.description + ".");
               }
                                
               try
               {
                    if (window.parent.closed)
                    window.close();
               }
               catch(err) { }
          }
                
     t=setTimeout("timedClose()",  50 );
}

Собственно, в первом блоке try...catch с переменным успехом (т.е. иногда да, а иногда нет) возникает вышеупомянутое исключение. Грешу на Windows Updates, так уж совпало. Всё, что мог для надёжных узлов настроил (в IE6).

Есть мнения?

Спасибо.
...
Рейтинг: 0 / 0
19.04.2007, 01:08
    #34471386
mrJust
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript - Разрешение отклонено
А откуда у вас в функции child? - глобальная переменная? msqrt84function timedClose()
{
if (child != null)
Попробуйте так:
Код: plaintext
1.
2.
3.
4.
5.
try
{
  if ((window.opener) && (window.opener.closed))
    window.close();                        
}
может opener не существует для текущего окна, тогда и летит exception
...
Рейтинг: 0 / 0
19.04.2007, 14:20
    #34472842
msqrt84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript - Разрешение отклонено
mrJustА откуда у вас в функции child? - глобальная переменная?
Да, глобальная переменная.
Ну, это не существенно. В принципе, можно и без неё.

mrJustПопробуйте так:
Код: plaintext
1.
2.
3.
4.
try
{
  if ((window.opener) && (window.opener.closed))
    window.close();                        
}

Не помогло.


mrJustможет opener не существует для текущего окна, тогда и летит exception
Вот это точно. Изначально, моя ошибка. Но вот IE6 (на нём отлаживал), зараза, всё равно иногда не выдавал исключения, даже на некорректный код (нельзя получить доступ к полю "closed"), а вот FF всегда об ошибке сообщал.

Переделал код следующим образом и всё ОК (и IE и FF и Netscape и Opera корректно обрабатывают):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
function timedClose()
{
    if (child != null)
        if (child == "true")
        {
            if (window.opener)
            {
                try
                {
                    if (window.opener.closed)
                        window.close();
                }
                catch (err)
                {
                    window.close();
                }
            }
            else
                window.close();
        }
                
	t=setTimeout("timedClose()",  50 );
}

Спасибо за наводку.

P.S.
1.Но вот IE6 всё равно даже при закрытии родительского окна выражение "window.opener" делает "true". Приходится через исключение закрывать дочернее окно.
2.От "window.parent" совсем отказался. Кстати, не мог бы кто-нибудь объяснить, в чём собственно разница между opener и parent? Ссылочку, если можно, а то толкового руководства (скорее спецификации) не нашёл.
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / JavaScript - Разрешение отклонено / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]