Starší komentáře ke článku: XHTML - tělo dokumentu, kontejnery a odstavce

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: Webmaster

Datum vložení: 23.12.2002 16:40:01

Hmmm, jen kdyby kromě MSIE všechny prohlížeče (testováno na elementu BODY u: NN 4, Netscape 7, Mozilla 0.x, 1.x, 1.2, Opera 5, 6, 7...) událost onunload neignorovaly... :-/

(Částečně jí podporuje Netscape 6.x, ale špatně. Netscape 7 už jí pro jistotu opět totálně ignoruje)

Avatar

Autor komentáře: Michal Kubeček

Datum vložení: 25.12.2002 20:21:28

Tak jsem si to na pár prohlížečích vyzkoušel a Mozilla 1.0.1, 1.2.1, 1.3a, Opera 6.03 i Konqueror 3.0.4 podporují onunload. Nezkoušel jsem nic složitého (jen otevření okénka s určitou stránkou), ale rozhodně nesouhlasím s tvrzením, že tyto prohlížeče událost ignorují.

Avatar

Autor komentáře: Martin Snížek

Datum vložení: 25.12.2002 20:22:12

Zrovna dneska jsem s onunload pracoval a chodila mi bez problémů v IE4+, Mozille 1.1 i Opeře 6 (5 jsem nezkoušel). Tak já nevím, jaxte to testoval :-)

Možná jde také o to, co pomocí ní děláte -- měla by sloužit pouze k "čistícím operacím" (např. zavřít přídavné okno), ne k nějakým složitým výpočtům nebo bránění uživateli v opuštění stránky. Je možné, že nějaké prohlížeče mají jistou množinu operací, které je s touto událostí možné používat, a ostatní ignorují...

Avatar

Autor komentáře: Webmaster

Datum vložení: 26.12.2002 11:15:34

Je možné, že to dělám nějak blbě (v tom případě se rád poučím), ale nemohu si pomoct. I když se omlouvám, ve výčtu v mém prvním příspěvku jsem dosadil špatně Mozillu 1.x a 1.2 - viz níže.

Ale uvedu naprosto jednoduchý příklad:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Zkouška onunload</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
</head>
<body onunload="alert('Ahoj');">
Text
</body>
</html>

Nevím jak Vám, ale mně to "dělá" (samozřejmě s povolením JavaScriptu, případně pro jistotu i pop-up oken atd.) při zavření okna s touto stránkou tohle:

Netscape 4.70 (nefunguje)
Netscape 6.2.1 (funguje - v některých jiných případech ale špatně)
Netscape 7.0 (nefunguje - ještě používá jádro Gecko 1.0.0 - viz níže)
Opera 5.01 (nefunguje)
Opera 6.05 (nefunguje)
Opera 7.0 b2 (nefunguje)
Mozilla 1.0.0 (nefunguje)
Mozilla 1.0.1 (funguje)
Mozilla 1.2.1 (funguje)
Mozilla 1.3a (funguje)

Avatar

Autor komentáře: Michal Kubeček

Datum vložení: 26.12.2002 14:15:18

Problém by mohl být s tím, že ve specifikaci DOM se praví: "<I>The unload event is raised as one document is unloaded and another is about to be loaded into the browser.</I>" Což se, striktně vzato, nevztahuje na situaci, kdy zavíráte okno - to byste měl použít spíše onclose. Ve specifikaci HTML 4.01 to tak jednoznačné není, ale také bych se klonil spíše k tomuto výkladu. Přesto většina prohlížečů volá onunload i při zavírání okna. V případě Mozilly to bylo skutečně opraveno v průběhu vývoje: bug 6354 (<a href='http://bugzilla.mozilla.org/show_bug.cgi?id=6354)' target='_blank'>http://bugzilla.mozilla.org/show_bug.cgi?id=6354)</a> a v případě zmíněného alert() je to bug 130719 (<a href='http://bugzilla.mozilla.org/show_bug.cgi?id=130719)' target='_blank'>http://bugzilla.mozilla.org/show_bug.cgi?id=130719)</a>.

Avatar

Autor komentáře: Webmaster

Datum vložení: 26.12.2002 14:58:08

Děkuji za jasné a pochopitelné vysvětlení :-)

I když vzhledem k té specifikaci DOM je to opravdu dost nesmyslně napsáno, protože když už se událost jmenuje "unload" (uvolnit, odejít), mělo by to logicky fungovat i na zavření okna a ne jenom na "přenahrání" dokumentu (stejného nebo jiného). A nejen kvůli logice - nevím jak Vy, ale já sám jsem výše uvedené nikdy událostně ošetřit nepotřeboval a potřeboval jsem ošetřit jedině právě zavření okna.

A pokud jde o událost "onclose", je sice krásné, že je už ve specifikaci DOM level 0, ale protože jí nepodporuje ŽÁDNÝ prohlížeč (MSIE6-, NN7-, Opera7-, Mozilla 1.3a- - u Konqueroru nevím), není to k ničemu.

Budu asi opakovat nářky mnohých, ale opravdu naprosto nechápu, PROČ není ani po 5 letech schválení specifikace CSS2 tato v prohlížečích KOMPLETNĚ implementována, stejně jako DOM level 0 a vyšší.
Prohlížeče se zdokonalují co se týče funkcí, ale co se týká standardů, je to bída s nouzí.
Má k tomuto někdo nějaké solidní vysvětlení? Já mám jen to, že je to lenost, ignorance nebo s prominutím neschopnost... To je jako kdyby tvůrci programů na rozlišení procesoru usnuli na vavřínech a jejich programy rozlišovaly max. 486...

Avatar

Autor komentáře: Michal Kubeček

Datum vložení: 26.12.2002 16:08:54

Především bych chtěl zdůraznit, že kdybych si mohl vybrat, rozhodně bych dal před skiny, e-mailovým, chatovým a bůh ví jakým klientem přednost prohlížeči, který by kompletně podporoval CSS 2 a DOM. Leccos z JavaScriptových vychytávek (z nichž 80 procent se soustředí na různou implementaci v různých prohlížečích) by bylo rázem zbytečných.

Proč tomu tak je? Především asi proto, že většina uživatelů nepozná, že prohlížeč lépe podporuje CSS 2, ale spíš si všimnou toho, že má nějaké nové "funkce". A pokud už se něco zobrazí špatně, považují to automaticky za chybu stránky (já mám přeci MSIE 5.0, tak mi netvrďte, že ten by něco zobrazoval špatně...).

Trochu si za to ale, zejména v případě CSS 2, autoři standardů mohou sami. Příslušný standard je natolik košatý, že udělat zcela kompletní implemetaci opravdu není triviální. To ostatně vedlo ke vzniku CSS 2.1, což je CSS 2 zjednodušené o některé vlastnosti, které se dodnes nikdo ani nepokusil implementovat (napr. counters). Cílem patrně bylo to, aby tvůrci prohlížečů, nejsou-li schopni kompletní podpory CSS 2, implementovali aspoň CSS 2.1. A to nemluvím o tom, že některé věci v CSS 2 jsou vyloženě proti zdravému rozumu.

V případě onunload to ale docela chápu. Otevírání nových oken z onunload je vůči uživateli velice neslušné a při zavírání okna obzvlášť. Pokud totiž zavíráte jediné okno, měl by skončit prohlížeč. Co má v takovém případě prohlížeč udělat: otevřít si vaše okénko nebo skončit? A co když nově otevřené okno (když místo alert() použijete window.open()) bude mít podobný onunload, má pak uživatel šanci (je-li prohlížeč rychlý a připojení také) skončit?

Avatar

Autor komentáře: Webmaster

Datum vložení: 26.12.2002 20:15:03

Děkuji za odpověď.

To je právě to: Jestli prohlížeči dělají větší reklamu běžní uživatelé v rozhovorech s jinými běžnými uživateli, a nebo jiní, třeba recenzenti či jiní odborníci, které rozšířená funkčnost (už tak dost složitých menu) nechává chladnými a prohlížeče třeba v článcích haní nebo vyzdvyhují hlavně co se týká podpory standardů - což je důležité, protože tyto články také čtou oni běžní uživatelé.

Pokud jde o zavírání okna a JS reakce na tuto událost:
To co píšete je sice pravda, ale je to zase jen část pravdy. Pokud by totiž platilo to co píšete, že by autor stránky mohl uživatele takto omezit (nepřihlížeje k možnosti vypnutí JS), mělo by se to vzít obecně - a pak by se celý JS mohl zrušit úplně. Protože pokud bych chtěl uživatele jako webmaster opravdu omezit, mohu to udělat už teď (a několik let nazpátek). Je totiž desítky dalších věcí, čím mohu uživateli tak znepříjemnit život, že mě bude proklínat ještě hodně dlouho - např. alertem daným do smyčky.
A webmaster by byl pěkně hloupý webmaster, kdyby na stránce udělal něco o čem píšete, protože za chvíli by na tu stránku už nikdo nevkročil!

Avatar

Autor komentáře: Webmaster

Datum vložení: 26.12.2002 20:20:14

To je ostuda...

Oprava: vyzdvihují

Avatar

Autor komentáře: Michal Kubeček

Datum vložení: 26.12.2002 22:57:05

Myslím, že s prohlížeči je to daleko jednodušší: většina uživatelů používá to, co dostala s Windows. Jinak si nedokážu vysvětlit, že třetina návštěvníků mých stránek dodnes používá strašidelný MSIE 5.0 (default ve Windows 98 SE). Pro takové uživatele je ta ikona prostě <I>internet</I> a na otázku, jaký používají prohlížeč, nejsou schopni odpovědět. Když mají štěstí a někdo jim tam nainstaluje aspoň MSIE 5.5 (nebo mají novější Windows), používají příslušnou verzi. Uživatelů, kteří vědí, že existují různé prohlížeče, a rozhodnou se pro některý konkrétní (i kdyby to měla být "jen" novější verze MSIE) bude podle mne tak do deseti procent. Jsem dokonce v pokušení tvrdit, že mnozí z nich jsou spokojenější, mají-li svůj <I>internet</I> než pokud by si měli něco vybírat. Bohužel...

S tím otevíráním oken máte svým způsobem pravdu. Jenom jsem chtěl upozornit na to, že JavaScriptové akce při zavírání okna jsou dost specifická záležitost, protože zavřením okna může dojít k ukončení prohlížeče, které by otevření nového okna (které navíc nemusí mít menu a title bar - čímž bude (drobný) problém ho zavřít) zablokovalo. Ještě složitější je otázka, co dělat v případě, že uživatel nezavře okno, ale zadá příkaz k ukončení prohlížeče (menu File / Quit). Má se v takové situaci jeho požadavek ignorovat a otevřít nové okno? Nebo po švejkovsku otevřít nové okno a vzápětí ho zavřít i s prohlížečem? Nebo prostě celý požadavek ignorovat? Tím vším nechci tvrdit, že onunload se v dané situaci volat nemá, jen naznačit, že existují poměrně rozumné důvody pro takovou implementaci.

Avatar

Autor komentáře: Webmaster

Datum vložení: 27.12.2002 18:44:19

No, já zase znám plno "běžných" uživatelů s Win98 (nejpoužívanějším OS na světě), kteří vědí, že mají jen MSIE 5.0, ale nechtějí na novější verzi přejít z jednoho prostého důvodu (mimoto už to i zkusili) - že mají dost slabý počítač - 486 nebo nějaké slabé Pentium s malou RAMkou, a MSIE 5.5 nebo MSIE 6.0 jim chodí o řád pomaleji (věřím, viděl jsem, vyzkoušel jsem...). I když máte pravdu i s těmi, kteří o verzích nic nevědí - ale těch prvních čím dál víc přibývá - i ti co dříve nic nevěděli třeba o HTML už dělají svoje jednoduché stránky - často i v Notepadu :-) A bude to pokračovat...

Add_2_odstavec:
To by asi bylo na bližší prozkoumání, co by bylo nejlepší udělat. Každopádně když už chce webmaster ošetřit odejití ze stránky (důvodů je specifických několik), chce to ošetřit za jakýchkoliv okolností, které způsobí, že ze stránky uživatel odejde, tedy i uzavření okna nebo celého prohlížeče. Při tomto specifickém odejití by ale bylo možné některé JS funkce zablokovat, například.

Avatar

Autor komentáře: Bohdan Ganický

Datum vložení: 4.1.2003 12:19:17

No když už bych měl tak pomalý počítač, jak vy tvrdíte, tak bych si radši pořídil Operu, než abych pracoval s IE5. Krom toho já jsem pracoval s Mozillou i na Pentiu 133, 40 RAM a nebyla o tolik pomalejší, aby se to nedalo vydržet.

Avatar

Autor komentáře: Martin Trčka

Datum vložení: 14.1.2003 9:25:06

Mýlíte se, Opera od verze 6 counters umí. Zkoušel jsem s nimi málo, ale minimálně základy Opera zvládne. Jinak pokud se dobře dívám, čítače by měly být i v CSS3. Jistě jen náhodou je editorem příslušné sekce člověk z Opera Software :-)

Zpět na článek | Úvodní stránka Interval.cz