zgodność jQuery z przeglądarkami

0

Witam wszystkich
Zacząłem skrobać sobie coś w jQuery z ciekawymi jak dla mnie wynikami lecz moja radość długo nie potrwała. Sytuacja wygląda tak że zrobiłem sobie stronkę ze skryptami: do skalowania czcionki, slidera na bazie wtyczki jFlow oraz ładowanie treści do elementu z mniejszego pliku. Wszystko działa ładnie dopóki oglądam to przez firefoxa natomiast w chrome i operze działa tylko slider a w IE nic.

Nie mam pojęcia dlaczego tak jest. Czy mógłby ktoś powiedzieć w czym jest problem?

0

Ja proponuję otworzyć konsolę błędów, lub coś podobnego. Bardzo fajna rzecz, przyda Ci się wiele razy. Przy okazji pouczyć się na czym polega debugowanie (hint: "debugging javascript" w googlach może pomóc).

Dodatkowo, jeżeli oczekujesz pomocy to może podaj jakiś kod, link, cokolwiek?

"Napisałem skrypt (w Twoim przypadku: "ściągnąłem skrypt") i nie działa, dlaczego?" --- to w skrócie Twój post - czy potrafiłbyś coś odpowiedzieć na to pytanie?

0
dzek69 napisał(a)

"Napisałem skrypt (w Twoim przypadku: "ściągnąłem skrypt") i nie działa, dlaczego?" --- to w skrócie Twój post - czy potrafiłbyś coś odpowiedzieć na to pytanie?

W skrócie chodzi mi o to: dlaczego skrypt nie działa jednakowo we wszystkich przeglądarkach i czy jest jakiś sposób żeby wszędzie było dobrze?

Nie cały skrypt jest ściągnięty jedynie wtyczka do slidera jFlow która z resztą działa poprawnie we wszystkich jak się potem okazało. W IE wyskoczyło coś o odblokowaniu skryptów które potencjalnie są zagrożeniem dla komputera i poszło wszystko ale przejścia funkcją fadeIn/Out jakoś dziwnie działają na półprzeźroczystym png w tle.

Aktualizacja przeglądarek nic mi nie daje ponieważ:

  1. Mam najnowsze wersje
  2. Strona jest dla znajomego który chce rozreklamować swoją firmę w sieci co oznacza że różni ludzie na różnych przeglądarkach będą ją oglądać i chciałbym żeby wszędzie działało dobrze.
0

W IE wyskoczyło coś o odblokowaniu skryptów które potencjalnie są zagrożeniem dla komputera i poszło wszystko ale przejścia funkcją fadeIn/Out jakoś dziwnie działają na półprzeźroczystym png w tle.

IE do wersji 8 WŁĄCZNIE robi artefakty jeżeli dwa png z kanałem alpha więcej niż 1 bitowym nachodzą na siebie i przynajmniej jeden z nich ma ustawioną przeźroczystość. Rozwiązanie - stosować przeźroczystość na element nadrzędny (czyli otoczyć <img> jakimś holderem). Będzie ok. edit: I będzie wymagało modyfikacji skryptu [!].

dlaczego skrypt nie działa jednakowo we wszystkich przeglądarkach

Jeżeli to przeglądarki nie są do d**y - a mówisz, że są nowe itd. - to zapewne skrypt jest do d**y. Wtyczka do jQuery może być napisana byle jak i nie odpalać się wszędzie, ponieważ jest nawalone tyle błędów, że któraś z przeglądarek nie ogarnia ich poprawiania (ew. stosowane są metody "tylko dla IE", które niektóre przeglądarki w ramach zwiększania kompatybilności rozumieją) --- i to nie jest absolutnie wina samego jQuery.

Pomimo zignorowania tak naprawdę treści mojego poprzedniego posta - wciąż gorąco zachęcam do otworzenia konsoli błędów - jest tam opis błędu, nazwa funkcji, linia w której coś poszło nie tak. Zdecydowanie łatwiej zrobić coś z tymi informacjami niż z tekstem "nie działa" i wróżeniem z fusów.

0
pedros100 napisał(a)

dlaczego skrypt nie działa jednakowo we wszystkich przeglądarkach i czy jest jakiś sposób żeby wszędzie było dobrze?

Bo różne przeglądarki mają różne silniki renderujące z różną obsługą CSS, JavaScriptu, DOM i BOM. To wszystko są jednak stosunkowo młode technologie, mające zaledwie jakieś 20 lat, a standaryzowane tak naprawdę od jeszcze krótszego okresu czasu.

Szczególnie słabą zgodność ze standardami ma IE. Ale: dzięki temu, że Microsoft... wykraczał poza specyfikację, mamy coś takiego jak Ajax, a ich tzw. model pudełkowy jest logiczniejszy od tego standardowego.

Technologie frontendowe rozwijają się bardzo prężnie, bo mają sporo do nadrobienia. Przykładowo, już obecnie, korzystając z JavaScriptu i odrobiny szeroko pojętego HTML-a 5, można tworzyć gierki, które chodziłyby w przeglądarce i odpowiadały złożonością grom komputerowym sprzed 15-20 lat. Być może dałoby się zejść i do 10, gdyby za tworzenie tych gier wzięły się porządne teamy.

Gry przeglądarkowe są jednak daleko w tyle za tymi natywnymi. Mają jednak szansę rozwijać się szybciej, na pewno szybciej w przeliczenu na zużyte na ten cel środki. Po prostu, aplikacje natywne już dawno wynalazły pewne rzeczy i teraz chodzi "tylko" o to, by przenieść to do przeglądarek.

Przez to wszystko, technologie frontendowe rozwijają się bardzo dynamicznie. Co i rusz dochodzą nowe funkcje, nowe możliwośći, nowe API. Animacje, transformacje, użycie nowoczesnych kart graficznych, nowe typy szybkiej komunikacji klient <-> serwer... To wszystko jest wdrażane zanim nawet powstaną stabilne wersje specyfikacji.

Różne przeglądarki są na różnym etapie wdrażania nowych bajerów. Sam fakt, że przeglądarki mają różne silniki renderujące jest bardzo korzystny. Od kilku lat (2-3?) obserwuje się wyścig zbrojeń wśród silników JavaScriptowych. Chrome bije się z Firefoxem i z Operą, a i Microsoft wypuszcza dużo, dużo szybsze przeglądarki niż jeszcze niedawno. Gdyby był jeden silnik, brak byłoby konkurencji i postęp nie byłby prawdopodobnie taki szybki.

W każdym razie, sam fakt istnienia różnych silników i nie zawsze stabilnych specyfikacji powoduje, że jeden kod może działać na jednej przeglądarce tak, a na drugiej inaczej.

Oczywiście, kod wysokiej jakości (nie chodzi o inżynierię oprogramowania, tylko o poziom kompatybilności) będzie działał w wielu przeglądarkach, w tym wszystkich najpopularniejszych. jQuery to jest biblioteka wysokiej jakości i z dobrą kompatybilnością. Robi to, co zapewnia, że robi w tych przeglądarkach, które zapewnia wspierać. Wśród tych przeglądarek jest IE, również w starszej wersji.

Kod wtyczek do jQuery to już coś zupełnie innego. Wtyczki mają bardzo różną jakość. Pisane są często przez zwykłych kmiotków. Często są też słabo przetestowane. Wtyczki mogą działać słabo lub w ogóle w różnych przeglądarkach. Niektóre wtyczki są całkiem dobre i działają dobrze.

Do tego dochodzi kod frameworków pisanych przez programistów backendowych, np. Javowców czy kolesi od C#. Oni potrafią wygenerować coś jeszcze niższej jakości niż twórcy wtyczek. Wyobraź sobie, że dajesz JavaScriptowcowi coś do napisania w Javie... też by mu za dobrze nie wyszło, bo to nie jego dziedzina.

I wreszcie Twój kod. Sądząc po zamieszczonych tu postach, póki co żaden z Ciebie programista JS. Jest bardzo prawdopodobne, że błąd jest w Twoim kodzie.

Na Twoim miejscu, szedłbym właśnie od tej strony. Sprawdził swój kod. Potem kod frameworka backendowego, jeśli takiego używam. Potem kod wtyczki do jQuery, a na końcu dopiero martwiłbym się o jQuery. To zapewne najlepszy fragment kodu frontendowego, jaki masz w swojej aplikacji. Był napisany przez dobrych programistów i jest naprawdę dobrze przetestowany. Ile testów jednostkowych napisałeś dla swojego kodu JS-owego? Ile testów ma wtyczka jQuery, której używasz? ;) No właśnie.

Tak czy siak, absolutnie nie da się nic powiedzieć na podstawie tego, co opisałeś. Opis błędów jest zbyt lakoniczny. Co mamy Ci poradzić, mając tylko jednozdaniowy opis tego, co robi dany moduł i komentarz, że "w IE nie działa"? Zdebugowałeś kiedyś cokolwiek "zaocznie" mając taki opis? Tak naprawdę to mogłeś dodać jeden przecinek za dużo w literale obiektowym i IE Ci się po prostu wysypało. My nie mamy jak tego sprawdzić, Ty masz. Konsola błędów!

0
pedros100 napisał(a)

Witam wszystkich
Zacząłem skrobać sobie coś w jQuery z ciekawymi jak dla mnie wynikami lecz moja radość długo nie potrwała. Sytuacja wygląda tak że zrobiłem sobie stronkę ze skryptami: do skalowania czcionki, slidera na bazie wtyczki jFlow oraz ładowanie treści do elementu z mniejszego pliku. Wszystko działa ładnie dopóki oglądam to przez firefoxa natomiast w chrome i operze działa tylko slider a w IE nic.

Nie mam pojęcia dlaczego tak jest. Czy mógłby ktoś powiedzieć w czym jest problem?

A może byś tak zarzucił kodem?
Siedzę w jQuery od roku czasu i nigdy nie miałem problemów z kompatybilnością w FF, Chrome, Opera, IE+7.
Jakiej wersji biblioteki jQuery używasz? Może używasz wytczek do starszej wersji jQuery i FF jakoś to ciągnie nie krzacząc, reszta już nie? Miałem taki przypadek z jednym sliderem.

Z niczego Ci nikt nic nie wywróży...

1 użytkowników online, w tym zalogowanych: 0, gości: 1