window.open nie działa ponownie po zamknięciu okna kliknięciem w "x"

w dziale Strony WWW w Operze
w_w_w napisał(a):

Witam!
Szukam od dłuższego czasu rozwiązania problemu związanego z Operą.
Mam taką małą funkcyjkę do otwierania powiększonych fotografii w nowym oknie:

var newWindow=null;
function closeNewWindow() {
if (newWindow){
newWindow.close();
}
}
function z(n,h,w) {
closeNewWindow();
w1='toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,titlebar=no,width='+(""+w)+',height='+(""+h)+',top=0,left=0';
var zz='<html><head><title>'+n+' - Tytuł strony</title></head>';
zz +="<body>";
zz +='<img src=jpg.php?n='+n+'&y='+(""+h)+'&x='+(""+w)+' border=0 width='+(""+w)+"' height='"+(""+h)+"' alt='"+n+"'></body></html>";
newWindow=window.open(" ","",w1);
newWindow.document.write(zz);
newWindow.document.close();
}


I teraz do rzeczy - dokąd tylko klikam na kolejne fotografie na stronie to powyższa funkcja otwiera nowe okno i tam wyświetla oryginał fotografii w oryginalnych rozmiarach -> funkcja jpg.php z parametrami. Ale jak już raz zamknę okno klikając na "x" (pod WIndows=krzyżyk zamknięcia okna), to już więcej ta funkcja nie działa. Aby mogła działać ponownie trzeba ponownie przeładować stronę.
W FF/IE wszystko działa poprawnie za każdym razem, pomimo zamykania okna z powiększeniami.
Czy mam gdzieś błąd w skrypcie, czy to taka uroda Opery?

Serdecznie pozdrawiam
w_w_w

Zajec napisał(a):

Błąd w skrypcie, w funkcji closeNewWindow:

function closeNewWindow() {
if (newWindow){
newWindow.close();
}
}

Zauważ, że jeśli okno zostało zamknięte "iksem" to zmienna "newWindow" nie dostaje nulla. Nadal odnośni się do zamkniętego okna. Ponieważ jej wartość nie jest nullem, warunekj wewnątrz tej funkcji zostaje spełniony i Opera próbuje zamknąć okno... które jest już zmaknięte. Tak więc warunek należy rozszerzyć o upewnienie się, ze okno jest nadal otwarte
if (newWindow && !newWindow.closed)
newWindow.close();
Gdyby nadal nie działało, koniecznie daj znać.

P.S.
Widzę, że mamy błąd na forum. Jeśli w powyższym kodzie widzisz "[apersant]amp[średnik]" to zamień to na znak ampersant. Chodzi o postawienie dwóch znaków ampersant między warunkami.

golew napisał(a):

Coś mi tam świta, że kiedyś była mowa, że nie usuwasz zmiennej definującej okno, w związku z czym kolejne wywołanie powoduje, że odnosisz się jakby do tamtej? Może źle to opisałam, bo z JS miałam styczność raz i nie więcej. Na pewno sa tu osoby, które lepiej się na tym znają smile

No i właśnie Zajec to potwierdził wink

PS. Zedytowałam twojego posta, kod najlepiej wrzucać do znacznika [.code][./code] żeby nie rozciągało strony albo i czasem nie traktowało tego jako kod HTML do przetworzenia.

w_w_w napisał(a):

Originally posted by Zajec:

Błąd w skrypcie, w funkcji closeNewWindow:

function closeNewWindow() {
if (newWindow){
newWindow.close();
}
}

Zauważ, że jeśli okno zostało zamknięte "iksem" to zmienna "newWindow" nie dostaje nulla. Nadal odnośni się do zamkniętego okna. Ponieważ jej wartość nie jest nullem, warunekj wewnątrz tej funkcji zostaje spełniony i Opera próbuje zamknąć okno... które jest już zmaknięte. Tak więc warunek należy rozszerzyć o upewnienie się, ze okno jest nadal otwarte
if (newWindow && !newWindow.closed)
newWindow.close();
Gdyby nadal nie działało, koniecznie daj znać.

P.S.
Widzę, że mamy błąd na forum. Jeśli w powyższym kodzie widzisz "[apersant]amp[średnik]" to zamień to na znak ampersant. Chodzi o postawienie dwóch znaków ampersant między warunkami.



Dzięki, to właśnie było przyczyną wadliwego działania skryptu pod Operą. FF/IE jakoś sobie z takim niedopatrzeniem radziły:)
Może mnie uda się wkleić &:
function closeNewWindow() {
if (newWindow && !newWindow.closed)
newWindow.close();
}

Pozdrawiam
w_w_w