piątek, 3 sierpnia 2012

Opera i document.write() w funkcji pod onclick

Siedzal sobie w jirze taki bug, ktory wreszcie przypadl mnie do rozwiazania. Na naszej stronie mamy kilka linkow, ktore w onclick maja pewna funkcje, nazwijmy ja myFoo().

Po kliknieciu w link, funkcja powinna zrobic swoje, zwrocic true i user powinien przejsc do wskazanej w atrybucie href strony. I owszem, tak sie dzialo wszedzie, ale nie w Operze. Opera, przy linkach z ta konkretna funkcja w onclick, stawala deba i odmawiala wspolpracy pokazujac pusta strone.

Juz jakis czas temu odkrylam, ze to zachowanie Opery bylo forma protestu na document.write(), ktory w opisywanej funkcji znajdowal sie tuz przez return true; Ewidentnie true nie bylo tym co ta funkcja wedlug Opery zwracala. Zakomentowanie document.write() przywracalo Operze zdolnosc dzialania.

Dzis (w sumie piatek, bug fixing day) wzielam ten task na tapete. Kolega z biurka obok zasugerowal, zeby document.write zamienic na ajaxa (w document.write znajdowal sie img, wiec zeby osiagnac ten sam efekt trackingowy, mozna by adres obrazka wywolac ajaxem). Doszlam do wniosku, ze jak nie bedzie innego wyjscia, to siegne po ajaxa, ale poki co poszukamy czegos prostszego.

Zasiegnelam opinii internetu i skorzystalam z sugestii zamieszczonej na jednej z grup. Zamienilam document write na operacje na DOM. Poprostu dodalam ten obrazek do kontenera body. Opera pochwalila mnie za ten pomysl prawidlowym dzialaniem, a ja wyslalam task do testow :)

Zabawy z kodem napisanym kilka lat temu i to niekoniecznie przez osobe, ktora ma o tym jakies pojecie to dla mnie nieustajace zrodlo nowej wiedzy na temat przegladarek, roznic miedzy nimi oraz tego, jak kodu nie powinno sie pisac.

Brak komentarzy:

Prześlij komentarz