Вход

Просмотр полной версии : TypeError: can't access dead object в расширении при window.open


FreeStyler
02.06.2013, 08:13
Делаю расширение. Хочу кнопку в тулбаре, при нажатии которой открывается окошко, если оно ещё не открыто, а если открыто - на него передавался бы фокус.
Загвоздка в том что окошко после закрытия второй раз открываться не хочет!
Расширение выложил, там просто кнопка, в файле 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
Выходит что после закрытия окошка не могу никак отследить закрылось таки оно или нет, ни 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
Думаю надо смотреть какие-то обходные пути, но что-то никак придумать их не могу((
в 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: