Wyjatek potwierdza regule?

w dziale Opera
yasny napisał(a):

witam
do budowy swojej strony uzywalem pewnego javaskryptu otwierajacego nowe okno ze zdjeciem (bez scroli, przyciskow itp.)
test strony w operze 6.05 - otwiera sie tylko puste okno

zdazylem wywalic skrypt z galerii, zostalo tylko troche na innych podstronach, w tym czasie pojawiaja sie opery z rodziny 7.xx , gdzie skrypt juz dziala poprawnie ...

troche mnie to zdziwilo, bo zawsze dostawalo sie autorowi skryptu za postawe "dziala w IE - nic wiecej mi nie potrzeba" , teraz jakby opera dostosowala sie do skryptu smile

chyba, ze jest cos, o czym powinienem w tym przypadku wiedziec i nie wypisywac glupot wink

mina86 napisał(a):

Daj kod skryptu najlepiej wink

yasny napisał(a):

<SCRIPT LANGUAGE="JavaScript">
nn4=(document.layers) ? true : false;
ie4=(document.all) ? true : false;

Nowe=null;
function Otworz(w,s,src) {
if (Nowe) {
if (ie4) Nowe.close();
else if (nn4) Nowe.closed;
Nowe=null
};
Nowe=window.open("", "","toolbar=no,menubar=no,location=no,personalbar=no,scrollbars=no,status=no,directories=no,resizable=no,top=10,left=10,height="+w+",width="+s);
Nowe.document.write("<HTML><HEAD><STYLE>BODY{BACKGROUND-REPEAT:no-repeat}</STYLE></HEAD><BODY BACKGROUND="+src+"></BODY></HTML>")
Nowe.focus()
}
</SCRIPT>

i oczywiscie potem:
<a href="javascript:Otworz(500,400,'foto.jpg')">

michmaj napisał(a):

Originally posted by yasny
<SCRIPT LANGUAGE="JavaScript">
nn4=(document.layers) ? true : false;
ie4=(document.all) ? true : false;

Nowe=null;
function Otworz(w,s,src) {
if (Nowe) {
if (ie4) Nowe.close();
else if (nn4) Nowe.closed;

ciach


Bosz rolleyes

yasny napisał(a):

chcialem dodac, ze jestem tylko skromnym rzemieslnikiem w html-u wink

quiris napisał(a):

Re: Wyjatek potwierdza regule?

Originally posted by yasny
troche mnie to zdziwilo, bo zawsze dostawalo sie autorowi skryptu za postawe "dziala w IE - nic wiecej mi nie potrzeba" , teraz jakby opera dostosowala sie do skryptu smile

chyba, ze jest cos, o czym powinienem w tym przypadku wiedziec i nie wypisywac glupot wink


W Operze 7.x poprawiono obsługę niestandardowej kolekcji document.all i pewnie dlatego skrypt zaczął działać.

squeal napisał(a):

Re: Re: Wyjatek potwierdza regule?

Originally posted by quiris
W Operze 7.x poprawiono obsługę niestandardowej kolekcji document.all i pewnie dlatego skrypt zaczął działać.

Ale przecież document.all nie jest nigdzie w skrypcie używany (poza wykrywaniem IE). Więc to chyba nie to.

Sądząc z opisu błąd musiał być gdzieś w okolicach document.write.

michmaj napisał(a):

Wlasnie bo co to jest za obiekt nowe.dokument? Ja sie zupelnoe nie znam na JS wiec prawdopodobnie to jest IE-JavaScript czyli charakterystyczny dla IE, a Opera w 7 wiele takich charakterystycznych dla IE rzeczy obsluguje zarowno w JS jak i HTML (patrz np marquee)

Nasty napisał(a):

Originally posted by yasny
<SCRIPT LANGUAGE="JavaScript">
nn4=(document.layers) ? true : false;
ie4=(document.all) ? true : false;


Squeal.. Jakie wykrywanie IE?? Nie znam się na JS, nie wiem nawet co robi document.all, ani document.layers, ale obserwując składnię, jak dla mnie jasne jest, że te funkcje w nawiasach zwracają jakąś zmienną logiczną. Jeśli któraś z tych dwóch operacji zostanie wykonana pomyślnie, zostane zwrócony pierwszy argument do odpowiadającej zmiennej - prawda; jeśli natomiast operacja się nie wykona, zostanie zwrócony fałsz logiczny.
BTW: A nie można uprościć? Zostawić same nawiasy i usunąć wszystko od znaków zapytania do końca linii? Chyba, że składnia nie pozwala.

Ale jak dla mnie to naprawdę super śmieciowy kod, z zamierzchłej epoki walki IE4 z NN4. Wtedy może się pisało takie skrypty, ale dziś to absurd.
A skąd wniosek, że skrypt nie działa w Operze 6 z powodu słabej obsługi przez nią document.all? Jak dal mnie, chodzi o ten fragment:

Originally posted by yasny
if (ie4) Nowe.close();
else if (nn4) Nowe.closed;
Nowe=null



Wyglada mi na to, że są sprawdzane dwa warunki, a jeśli przeglądarka nie zwróci żadnej z nich, to następuje bezwarunkowe przejście do ostatniej opcji - i wtedy okno nie jest otwierane.

Tak to widzę. Jeśli gdzieś się mylę, proszę mnie poprawić.

michmaj napisał(a):

Ja też tak przypuszczałem, ale mi wyszło na to, że jak przeglądarka nie jest ani IE4+ ani NN4+ to okno nie jest wtedy zamykane (close/closed). Dziwne.

Nasty napisał(a):

Originally posted by michmaj
Ja też tak przypuszczałem, ale mi wyszło na to, że jak przeglądarka nie jest ani IE4+ ani NN4+ to okno nie jest wtedy zamykane (close/closed). Dziwne.


Nie wiem co robią dokładnie te funkcje, ale chyba można założyć, że jeśli zostanie wykryte IE, to nowe okno się otwiera, a nie zamyka, prawda? smile

michmaj napisał(a):

Tak przypuszczam, w kazdym razie od razu sie zlapalem za glowe jak zobaczylem to if IE i if NN (rozumujac pod katem jezyka angielskiego ani JS).

P.S. Wojciech cos dawno nie walnales zadnego 20-punktowego posta na angielskiej czesci. Co sie dzieje.

Nasty napisał(a):

Originally posted by michmaj
P.S. Wojciech cos dawno nie walnales zadnego 20-punktowego posta na angielskiej czesci. Co sie dzieje.


listy błędów i pomysłów na usprawnienia? bigsmile
ehm, tak jakoś ostatnio zająłem się bardziej osiołkami.. I trochę mniej czasu mam wieczorami, bo przeprowadziłem się, zmieniłem pracę i później wracam do domu.
Poza tym bety wersji 7.20 są naprawdę dobrej jakości. No i nie ma póki co tak dużo nowej funkcjonalności do komentowania.
Nie będę im przypominał o pomysłach na funkcjonalność, które zgłosiłem wcześniej - wierzę, że gdzieś to odnotowali i jeszcze dodadzą. Widać, że beta1 była bardzo skoncentrowana na samym enginie, beta2 już bardziej na zmiany w interfejsie i nowe funkcje. Kolejne bety mogą przynieść kolejne rewelacje. Czekam cierpliwie.

Ale mam coś w zanadrzu - coś specjalnego, czego jeszcze nie publikowałem. p
Ładną listę uwag co jeszcze można usprawnić w M2. smile Zbieram się od dłuższego czasu i nie mogę, ale już zdecydowanie najwyższy czas. Zrobię to na pewno w tym tygodniu. Dziś, może jutro. Ale.. może na grupy. A jak nie będzie dużego odzewu, to może dopiero wtedy na forum.