Całkiem stylowo świrnięci
Internet Explorer: "problem z połączeniem", a... Javascript
(autor: Całek, 15-12-2006 o godz. 22:36)
To, że Internet Explorer jest dziwną przeglądarką chyba wszyscy zajmujący się zawodowo tworzeniem stron wiedzą. Zdarzyło wam się czasem, że podczas otwierania strony (widać było w tle, że wszystko się ładnie ładuje...) wyskoczył nagle błąd, iż "Internet Explorer nie może otworzyć miejsca internetowego http://...." (w wersji angielskiej jeszcze jest podany numer błędu: 80004004)? Dziś non stop byłem świadkiem czegoś takiego. Po kliknięciu "ok" to, co się zdążyło załadować znikało i IE wyświetlał informację o błędach sieci/połączenia.
Do tej pory naiwnie myślałem, że to rzeczywiście wina serwera/połączenia/sieci. Jednak po dziejszej wizycie u klienta mnie tknęło - pod Firefoxem nie było w ogóle problemów, a pod IE non stop. Zatem google poszło w ruch...
Wyniki, które dostałem, mówiły, że problem leży w javascript. Chodzi o to, że IE po otrzymaniu części witryny najprawdopodobniej odpalało akcję, którą powinien odpalić po załadowaniu całego dokumentu. Efekt tego znamy - ów błędny komunikat o błędzie.
Niektórzy po prostu wyłączali zaawansowany javascript dla IE. Niestety u mnie ta opcja odpada - w panelu administracyjnym jest bardzo dużo ułatwień i bez zaawansowanego javascript wielu naszych klientów, którzy korzystają niestety z IE, nie poradziłoby sobie. Jak zatem rozwiązałem problem?
Rozwiązanie
Otóż skoro problem polega na tym, że javascript jest odpalany zanim skończy się ładować strona, to... dla IE po prostu przeniosłem Javascript na sam koniec, zaraz przed zamknięciem </body>. Dzięki conditional comments pozostałe przeglądarki mają javascript ładowany w sekcji head, ale nie widzą tego na samym końcu dokumentu. Dla IE natomiast jest odwrotnie - widzi kod przy końcu, a nie widzi tego w sekcji head. Poniżej zastosowany kod:
<head>
[..]
<![if !IE]>
<script ...></script>
<![endif]>
</head>
<body>
[..]
<!--[if IE]>
<script ...></script>
<![endif]-->
</body>
Prawda, że oczywiste? ;>))