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ą
No i właśnie Zajec to potwierdził
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(); }