Javascript-форум (https://javascript.ru/forum/)
-   Firefox/Mozilla (https://javascript.ru/forum/css-html-firefox-mizilla/)
-   -   TypeError: can't access dead object в расширении при window.open (https://javascript.ru/forum/css-html-firefox-mizilla/38447-typeerror-can%27t-access-dead-object-v-rasshirenii-pri-window-open.html)

FreeStyler 02.06.2013 08:13

TypeError: can't access dead object в расширении при window.open
 
Вложений: 1
Делаю расширение. Хочу кнопку в тулбаре, при нажатии которой открывается окошко, если оно ещё не открыто, а если открыто - на него передавался бы фокус.
Загвоздка в том что окошко после закрытия второй раз открываться не хочет!
Расширение выложил, там просто кнопка, в файле myt.js код:
function win(){
  if(typeof(popupWin)!="undefined") {
		alert(typeof(popupWin));
		alert(popupWin.closed);
		} else { 
		popupWin=window.open("http://ya.ru/","Record","width=681,height=425,resizable=yes,scrollbars=yes,status=yes");
	}
}


Если окошко открыто при повторном нажатии на кнопку - всплывает 2 алерта: 1 - object 2 - false
Если закрываем окошко и снова пытаемся отыкрыть - всплывает 1 алерт - object, а на втором консоль выдаёт ошибку:

Код:

Ошибка: TypeError: can't access dead object
Источник: chrome://myt/content/myt.js
Строка: 4

Вопрос почему дед обжект всё-таки определяется как объект, а свойства не доступны и вообще почему он не удаляется полностью?! -_-
Выходит что после закрытия окошка не могу никак отследить закрылось таки оно или нет, ни onclose ни onunload не цепляются.

dmitriymar 02.06.2013 12:48

Цитата:

Сообщение от FreeStyler
Выходит что после закрытия окошка не могу никак отследить закрылось таки оно или нет, ни onclose ни onunload не цепляются.

проверять свойство closed объекта окна, либо document === null

FreeStyler 02.06.2013 17:00

alert(popupWin.closed);
вот здесь я и проверял closed, при проверке document та же ошибка TypeError: can't access dead object
Объект как бы есть, но свойств нету! -_- Бред вообще! Нет к ним доступа и никакого алерта вообще не всплывает(
В обычном html документе работает всё нормально, а вот в расширении не хочет(
Думаю надо смотреть какие-то обходные пути, но что-то никак придумать их не могу((

Deff 02.06.2013 17:11

function win(){
  if(typeof(popupWin)!="undefined") {
		alert(typeof(popupWin));
		alert(popupWin.closed);
		} else { 
		window.popupWin=window.open("http://ya.ru/","Record","width=681,height=425,resizable=yes,scrollbars=yes,status=yes");
	}
}

dmitriymar 02.06.2013 22:20

Цитата:

Сообщение от FreeStyler
Думаю надо смотреть какие-то обходные пути, но что-то никак придумать их не могу((

в try проверку оберните и отлавливайте исключение выбрасываемое

FreeStyler 03.06.2013 02:00

Deff, не, так тоже ошибка...
dmitriymar, спасибо большое! Я и не знал про такую конструкцию!
Получилось так:
function win(){
  if(typeof(popupWin)!="undefined") {
 try {if(popupWin.focus());}
 catch (e) {popupWin=window.open("http://ya.ru/","Record","width=681,height=425,resizable=yes,scrollbars=yes,status=yes");
}
} else popupWin=window.open("http://ya.ru/","Record","width=681,height=425,resizable=yes,scrollbars=yes,status=yes");
}

Знал бы что можно ошибки отлавливать - не создавал бы :thanks:


Часовой пояс GMT +3, время: 00:32.