Pokazywanie postów oznaczonych etykietą opera. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą opera. Pokaż wszystkie posty

piątek, 28 listopada 2014

gdzie jest moje ciasteczko??

Czasami nie da sie inaczej i trzeba sięgnąć po cookie. Tak właśnie było tym razem. Prosta sprawa, user wchodzi na nasz portal, to zapamiętujemy w cookie stronę od której zaczął przeglądanie naszej witryny. Napisałam sobie prosty kod, bez żadnych bibliotek (takie coś na start, żeby mieć kod do refaktoringu i testowania rozwiązania). Pod Chrome i FF działa jak złoto, pod natywną Androidową przeglądarką również.

Pokazałam rozwiazanie naszemu seniorowi. Rzucił oczkiem i podpowiedział kilka usprawnień, m.in. wykorzystanie ścieżki ze zmiennej globalnej a nie wpisywanie jej z palca (biorąc pod uwagę fakt, że to było tylko dla jednego adresu, to co różnica?). Poprawiłam, przetetsowałam. Działa.

Jako, że rozwiązanie ogólnie przeznaczone jest tylko pod przegladarki mobilne, nie przykładałam specjalnej wagi do testowania na desktopowych. Sprawdziłam na wszystkich przeglądarkach zainstalowanych na moim HTC M8 - natywna, Chrome i FF. Działa jak złoto. Chciałam sprawdzaić pod Operą mini, ale złosliwa małpa nie chciała się łączyć z serwerem dev. Poszłam po inny telefon, to działu mobilnego. Tam na jakimś Samsungu postawili mi Operę mini, która też odmówiła współpracy. Olałam sprawę i wzięłam się za testowanie pod zwykłą Operą.

No i nie działa :(. Błędem nie rzuca, ale i nie działa. No pięknie... Jeszcze koleżanka, z którą robiłam pair programming sprawdziła na swoim WindowsPhone pod IE i też nie działa. No ki diabeł? Zostawiłam jak jest. Następnego dnia rano usiadłam do debuggowania. Modern.IE stoi na Virtualboxie, wiec wzięłam IE10 na tapetę i zaczynam debuggować. Linijka po linijce... i co? I jajo... cookie sie nie zapisuje. No jak to się nie zapisuje? - prowadzę monolog w duszy debuggując dalej. Krok po kroku testując różne ustawienia doszłam dlaczego to cookie się nie zapisuje...

Składnia jest banalnie prosta: document.cookie("nazwa=wartość");. Można ją rozszerzyć o datę ważności cookie: document.cookie("nazwa=wartość; expire=data") albo o ścieżkę dla której cookie jest ważne: document.cookie("nazwa=wartość; expire=data; path=ścieżka"). I to właśnie ta ścieżka była przyczyną problemów dla Opery i IE. Używałam ścieżki pełnej, branej ze zmiennej globalnej: http://server-name.domain.com/costam/ co okazało się zupełnie niestrawne dla tych dwóch przeglądarek. Obie wymagają podania ścieżki zaczynając od /, czyli bez domeny.

Oczywiście jaśnie oświecona Opera, ani tym bardziej IE nie dały nawet pół błędu, nic. Po prostu nie zapisywały cookie...

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.