Odlišnost Google Chrome od zbytku JavaScriptového světa

od aichi E-mail

Včera jsem se jal v JavaScriptu kvůli jednomu projektu zachytávat události kolečka myši. Tato událost je v IE pod názvem onmousewheel, v ostatních prohlížečích má název DOMMouseScroll. Událost se odpálí na elementu když nad ním zatočíme kolečkem a její vlastnost detail, resp. wheelDelta udávají směr otáčení kolečka.

...

Zde již vyvstávají první rozdíly mezi prohlížeči. Všechny prohlížeče udávají kladné číslo pro kroucení nahoru a záporné pro kroucení dolu, nicméně FireFox jako jediný udává tyto hodnoty s opačným znaménkem. Mohlo by se zdát, že z tohoto čísla bychom mohli odvodit o kolik bylo odscrolováno (otočeno kolečkem), ale chyba lávky. Každý prohlížeč udává jiné hodnoty! IE, Opera a Safari udávají ± 120, Firefox ±3 a Google Chrome kupodivu ±360.

Je vidět, že ač se snaží autoři Chromu, aby byl co nejblíže standardům a zavedeným zvyklostem, je v některých okrajových záležitostech jeho JavaScriptové jádro V8 odlišné. Pokud se liší v tomto případě, je jen otázkou času kdy najde někdo jiný jinou odlišnost. To mě vedlo na myšlenku, zda by tato odlišnost nešla použít k vytvoření testu, který by jednoznačně určil v JavaScriptu Chrome a odlišil ho od Safari.

Zkusil jsem použít vyvolávání událostí nad elementy pomocí JavaScriptové funkce document.createEvent a odpálit DOMMouseScroll nad elementem, nad kterým jsem tuto událost odchytával. Událost jsem zachytil, nicméně v události nejde specifikovat žádným parametrem otočení kolečkem, tudíž vyvolaná událost vždy ukazovala nulové otočení. :'(

Nezbývá mi než se tedy zeptat, zda neznáte způsob jak JavaScriptem zjistit Chrome jinak, než z userAgent řetězce.

Adresy zpětných odkazů pro tento příspěvek:

Trackback URL (right click and copy shortcut/link location)

8 komentářů

Komentář od: David Majda [Návštěvník]
David MajdaJen bych podotknul, že implementace událostí v prohlížeči není součástí JavaScriptového jádra (v případě Chrome V8). Jádro řeší jen jazyk jako takový + základní objekty typu Array, String, Date apod.
21. 01. 09 @ 15:39
Komentář od: Martin Hassman [Návštěvník]
Martin HassmanNa rozdílech mezi prohlížeči není zas tak nic divného, protože neexistuje směrodatná dokumentace (jedná se o další oblast, kde je dokumentace opožděná za reálnými potřebami).

Události, které zmiňuješ, jsou vendor specifik
http://msdn.microsoft.com/en-us/library/ms536951(VS.85).aspx
https://developer.mozilla.org/en/Gecko-Specific_DOM_Events

HTML5 k tomu neříká nic, potřebné DOM3 rozhraní je zatím v draftu a zřejmě ještě nějaký čas bude
http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#events-Events-eventgroupings-mousewheelevents
21. 01. 09 @ 16:57
Komentář od: aichi [Člen] E-mail
aichiNa WheelEvents jsem koukal a zkoušel :) ale ani tamtudy cesta nevedla, neb to nikdo neumí.
21. 01. 09 @ 17:08
Komentář od: Hellish [Návštěvník]
HellishV čem by bylo rozpoznávání browseru přes událost otáčení kolečka lepší, než přes userAgent? Nějak nechápu pointu.
21. 01. 09 @ 17:09
Komentář od: aichi [Člen] E-mail
aichiProtože userAgent se dá jednoduše změnit, např. opera má přímo v menu nastavení aby se tvářila jako IE, ale její engine se nebude chovat jako IE. Proto je lepší detekovat vlastnosti prohlížečů. Většinou se to dělá až když tu vlastnost potřebuješ, ale když píšeš nějaký framework, který mají používat ostatní, tak jim to chces ulehčit tím, že tam budeš mít detekci a oni ji použijí. Pak nemusí znát drobné rozdíly mezi prohlížeči.
21. 01. 09 @ 17:14
Komentář od: Fred [Návštěvník]
FredTeď to nemůžu vyzkoušet nemám tu sp2, takže ani chrome. Testuju ho v prohlížeči Arora. Ale chrome ukládá náhledy do rychlého panelu do databáze ve formátu chrome-resource://thumb/http://atd takže teoreticky pokud by jsi dal náhledu (nejspíš seznam nebo google) onload=chrome a onerror=neni_chrome možná by to mohlo fungovat. Bohužel nevím jak to bude reagovat, protože mimo ten new tab je ten obrázek zašifrovaný. víc v mém starším tupém dotazu na webtrhu http://webtrh.cz/23217-google-chrome-thumb-format
31. 01. 09 @ 22:59
Komentář od: crewmanek [Návštěvník]
crewmanekChrome je u mě nestabilní. Padá si kdy chce. A to nemusím ani zkoušet Javascripty.
08. 03. 09 @ 18:12
Komentář od: wowgold [Návštěvník]
wowgoldvery good...
27. 03. 09 @ 03:37

Napsat komentář


Vaše e-mailová adresa nebude zveřejněna.

Adresa Vašich WWW stránek bude zveřejněna.
(Konce řádku budou převedeny na <br />)
(Jméno, email a webová stránka)
(Dovolí ostatním uživatelům kontaktovat Vás prostřednictvím formuláře pro zprávy (Vaše e-mailová adresa NEBUDE zveřejněna.))