Autor Zpráva
Spectator
Profil
Ahoj,

nemáte někdo nějaké opravdu funkční řešení, které detekuje jakékoliv opuštění stránky (klik na odkaz, zavření tabu, zavření prohlížeče, ...). Potřebuji stopnout měření času uživateli pro další zpracování, ale nějak nemůžu toto pořádně odchytit. :-(

Zkoušel jsem např.:
        $(window).bind('beforeunload', function(eventObject) {
            $.get('url...');
        });

        $('a').live('click', function(eventObject) {
            $.get('url...');
        });

Ale bez většího úspěchu.


Díky moc
Chamurappi
Profil
Reaguji na Spectatora:
Událost onbeforeunload nefunguje v Opeře. Prohlížeče také drasticky omezují, co všechno jde během odchodu udělat, a zrovna u AJAXu bych si také nebyl jistý, zda se stihne požadavek doopravdy vyslat.

Já bych to na tvém místě vzdal. Sledováním onunload jde získat nějaká data, ale stoprocentní to není a nikdy nebude, hodí se to jen na vzájemné porovnání chování u větší masy lidí. I kdyby prohlížeče ochotně oznamovaly všechny druhy vypnutí, pořád může na počítač spadnout obří vesmírná loď a rozmáčknout ho na placičku, která už pak kvůli svému nevšednímu hardwarovému uspořádání nikdy žádnou událost nevyvolá. Nebo můžou vypadnout pojistky.
Spectator
Profil
Chamurappi:

Hm :-( Nepotěšil... A neměl bys nějaký nápad, jak sledovat to, zda náhodou uživatel na stránce není? Ukládat si cokoliv do cookie nebo session asi také smysl nemá? Nějak mne nenapadá nějaké optimální řešení. Cronem si kontroluji, zda není nějaký neuzavřený záznam starší než platnost session, ale to je jen pro čištění smetí :-(
maktub
Profil *
Chamurappi:
pořád může na počítač spadnout obří vesmírná loď a rozmáčknout ho na placičku
Cože :D
Bubák
Profil
maktub:
Cože :D
Nadsázka, to neznáš? Tak třebas zase nějaká důchodkyně půjde na dřevo.
Spectator
Profil
to jste mi moc nepomohli :-)
Taps
Profil
Spectator:
http://jecas.cz/aktivni-stranka
Chamurappi
Profil
Reaguji na Spectatora:
K čemu tuto informaci potřebuješ?

A neměl bys nějaký nápad, jak sledovat to, zda náhodou uživatel na stránce není?
Pravidelným bombardováním serveru požadavky. Třeba AJAXem, nebo načítat obrázek. Skončí-li bombardování, uživatel je pryč. A nebo se mu jen zaškobrtlo připojení :-)

Ukládat si cokoliv do cookie nebo session asi také smysl nemá?
Session bys měnil také tím bombardováním, takže nemá smysl o ní uvažovat separátně. Cookie je u klienta. Kdybys každých pár sekund aktualizoval cookie, tak při další návštěvě po odchodu budeš cca vědět, kdy uživatel minule odešel.


Reaguji na Tapse:
Tím může spolehlivě zjistit jen to, jestli uživatel má stránku normálně zobrazenou, tzn. že nemá minimalizované okno a že není přepnutý ve stejném prohlížeči do jiného tabu. Což asi není zrovna věc, kterou hledá.


Reaguji na maktuba:
Cože :D
Tobě se to ještě nestalo? Abys pak nebyl překvapen…
Str4wberry
Profil
Reakce na Chamurappiho:
Událost onbeforeunload nefunguje v Opeře.

V Opeře funguje. Jen (ve staré Opeře 12) nezareaguje na zavření, ale na prokliknutí odkazu ano.

Vyzkoušej: Zabránění zavření stránky
Spectator
Profil
Chamurappi:

informaci potřebuju pro limit při vyplňování dotazníku, ale k tomu dotazníku je možné se vracet i později. Samozřejmě limit se sčítá a právě proto potřebuji uložit konec sedánku, když vyskočí.

Vzhledem k tomu, že každých několik sekund synchronizuju to odpočítávadlo, tak tam na to navěsím i ten pravidelný zvonek. Jako na dráze :-)
AM_
Profil
Pokud potřebuješ stopovat čas, který tráví uživatel na stránce, můžeš třeba každých 5 sekund volat nějaký ajaxový požadavek. Uživatelé mobilních zařízení tě zastřelí za plácání trafficem, ale fakt záleží, co přesně za projekt děláš, třeba zrovna v tvém případě vysoký traffic nebude vadit.
Nebo vstoupit do málo probádaných vod a zkusit si otevřít websocket - nezkoušel jsem, ale předpokládám, že se zavřením prohlížeče se zavře i websocket. Zas ale podpora v prohlížečích není nic moc.
Pozn. takto zase nerozeznáš případ, kdy má uživatel sice browser otevřený, ale spadnul mu internet :)
100% metoda na tohle prostě není.
Spectator
Profil
AM:
V tomhle případě jde o rozsáhlé dotazníky a množství lidí s mobilními zařízeními je minimální. pošlu dejme tomu po 1 minutě ajaxí cinknutí. to nic moc nesežere :-)
AM_
Profil
Pokud ti stačí přesnost na minuty, tak je to řešení rozhodně v pohodě, asi i pro mobily.
Joker
Profil
AM:
Uživatelé mobilních zařízení tě zastřelí za plácání trafficem, ale fakt záleží, co přesně za projekt děláš, třeba zrovna v tvém případě vysoký traffic nebude vadit.
Ten AJAXový „ping“ nemusí být nijak velký.
Pro tuto stránku diskuse dal požadavek plus odpověď mínus HTML kód stránky kolem 1,2 kB. A to pořád obsahuje kupu cookies a hlaviček, které by Spectator nepotřeboval.

Teoreticky by na požadavek stačilo: GET *url* HTTP/1.1\r\n a odpověď HTTP/1.1 200 OK\r\n\r\n, což je pár desítek bajtů.
Zařídit krátkou odpověď serveru (tj. pro uživatele malý download) je asi snazší, než zařídit krátký dotaz (malý upload), kde to závisí na tom, co vše tam nacpe prohlížeč.

Možná jen kdyby se držely nějak výjimečně velké cookies, je dobré pamatovat, že se odesílají s každým požadavkem na danou doménu.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: