devnul
16.06.2008, 17:53:49
Interesuje mnie wykrycie bezczynności użytkownika po stronie klienta. Przez bezczynność rozumiem brak akcji na urządzeniach wejścia takich jak klawiatura czy mysz zarówno w obrębie okna/karty (w user-agencie) w której aplikacja działa, jak i w reszcie systemu. O ile wielkim problemem nie jest zdefiniowanie takiego stanu przy fokusie na aplikacji (okno i karta są aktywne) to problem pojawia się gdy aplikacja nie jest "na wierzchu", wtedy komunikaty nie są przesyłane. Bezczynność powinna być wykrywana zawsze, bez znaczenia czy aplikacja jest zminimalizowana, znajduje się na innym obszarze roboczym czy na nieaktywnej karcie w przeglądarce. Interesuje mnie sposób działający na każdym browserze (ewentualnie indywidualne sposoby dla różnych przeglądarek), ważne aby był zrealizowany przy dostępności w miarę standardowych rozszerzeń (javascritp, flash, Java). Będę wdzięczny za wszelkie pomysły.
Zajec
16.06.2008, 18:30:42
Być może uda Ci się jeszcze wykryć ruchy myszki bez aktywnej strony, ale na pewno nie zrobisz tego z klawiaturą. Byłby to straszny błąd bezpieczeństwa ze strony danej przeglądarki, jeśli umożliwiałaby przechwycenie dowolnej stronie wszystkich wciskanych klawiszy.
Wyobraź sobie: zostawiasz w tle otwartą stronę, a jej autor dokładnie wie co piszesz do znajomego na Jabberze mimo że to okno zupełnie innej aplikacji. Innymi słowy: nie osiągniesz takiego czegoś.
devnul
16.06.2008, 18:45:37
nie ma rzeczy niemożliwych - dlatego pytam - może akurat ktoś jakiś pomysł ma. Nie chce w żadnym razie przechwytywać samych klawiszy a jedynie ewentualnie zdarzenie o wciśnięciu klawisza lub przycisku i ruchu myszy - nie interesuje mnie absolutnie nic ponadto. A jak to wygląda od kwestii bezpieczeństwa to ja doskonale wiem - nigdzie nie powiedziałem że to ma się odbywać bez wiedzy użytkownika - jeśli jest taka konieczność może on być powiadomiony przez jakiś zewnętrzny program o fakcie obserwacji aktywności. Ale pytanie nie jest czy się da tylko jak. Da się wszystko i zawsze - kwestia podejścia
Zajec
16.06.2008, 19:09:45
Cytat(devnul @ 16.06.2008, 19:45:37 )

nie ma rzeczy niemożliwych - dlatego pytam - może akurat ktoś jakiś pomysł ma. (...) Ale pytanie nie jest czy się da tylko jak. Da się wszystko i zawsze - kwestia podejścia
Pewnie, że się da. Proponuję znaleźć po jednym explioicie na przeglądarkę i podrzucać kod robiący to czego potrzebujesz.
Cytat(devnul @ 16.06.2008, 19:45:37 )

Nie chce w żadnym razie przechwytywać samych klawiszy a jedynie ewentualnie zdarzenie o wciśnięciu klawisza lub przycisku i ruchu myszy - nie interesuje mnie absolutnie nic ponadto. A jak to wygląda od kwestii bezpieczeństwa to ja doskonale wiem - nigdzie nie powiedziałem że to ma się odbywać bez wiedzy użytkownika - jeśli jest taka konieczność może on być powiadomiony przez jakiś zewnętrzny program o fakcie obserwacji aktywności.
Niestety osoby odpowiedzialne za specyfikację JavaScript były na tyle złośliwe, że postanowiły nie dawać skryptom nawet informacji o samych wciśnięciach klawiszy

Tu nie chodzi o to, że pozwalasz użytkwonikom wiedzieć, że są w pewien sposób obserwowani. To przeglądarki na to nie pozalają i już.
Zostają dwa rozwiązania. Pierwsze to napisać własny plugin i dowiedzieć się czy możesz z jego poziomu przechwytywać informacje o klawiszach/myszce. Gdy to się nie uda możesz jeszcze napisać własną przeglądarkę i zmusić użytkowników strony do jej używania.
devnul
16.06.2008, 20:37:43
Zajec, nie po to założyłem temat żeby wysłuchiwać podobnych mądrości ale dlatego że miałem nadzieję iż znajdzie się ktoś kto miał podobny problem i być może jakoś temu zaradził. To że nie wiesz czy da się coś zrobić nie znaczy że się nie da. Także bardzo proszę zostaw swoje uwagi dla siebie bo niczego odkrywczego nimi nie wnosisz.
sniezny_wilk
16.06.2008, 20:58:11
JavaScript raczej odpada. Flash może "chwycić" kiedy jest nieaktywny, albo kiedy nie ma focusa, myszka poza flashem, ale bezczynności z IO nie przechwyci. Chociaż można flasha zincem przerobić i tam jest kilka ciekawych opcji ale wtedy przekompiluje się do .exe, a Tobie chyba chodzi o aplikacje www ? Moim zdaniem JS i Flash odpada.
scanner
16.06.2008, 21:27:58
Jedynym rozwiązaniem Twojego problemu, jest napisania aplikacji JAVA, która byłaby instalowana po stronie klienta, lądowała (dla windows) w tray - i samodzielnie komunikowała się z Twoim systemem na serwerze. Musisz wyciągnąć tę czujkę poza browser.
sniezny_wilk
16.06.2008, 21:31:43
Cytat(scanner @ 16.06.2008, 20:27:58 )

Jedynym rozwiązaniem Twojego problemu, jest napisania aplikacji JAVA, która byłaby instalowana po stronie klienta, lądowała (dla windows) w tray - i samodzielnie komunikowała się z Twoim systemem na serwerze. Musisz wyciągnąć tę czujkę poza browser.
To właśnie też może zrobić flash we współpracy z Zinc'em.
devnul
16.06.2008, 21:58:40
scanner,sniezny_wilk: to co obaj proponujecie jest w moim przypadku nie do zaakceptowania aplikacja ma działać out of the box bez instalacji dodatkowego softu na większości komputerów klienckich, czyli w grę poza javascript wchodzi właśnie flash i aplety javy ale nic ponad to. Gdyby to nie było ograniczeniem to nie byłoby tematu.
scanner
16.06.2008, 22:06:46
No to masz
<?php
mission::impossible();
?>
devnul
16.06.2008, 22:13:35
mam nadzieję że się mylisz i że jednak ktoś mi powie że da się to zrealizować przy użyciu apletu javy choćby (dobrze jeszcze jakby pokazał jak:P)
trucksweb
16.06.2008, 23:01:24
tacy doswiadczeni i co

... a da sie.
bank WBK posiadal taka opcje, ktora sprawdza aktywnosc uzytkownika- przez wcisniecie klawiszy i ruch mysza. Dodatkowo obslugiwal zamkniecie przegladarki gdy uzytkownik byl zalogowany i sie nie wylogowal. Ostrzegal odpowiednim komunikatem.
Nie wiem jak to jest teraz bo nie mam u nich juz konta, ale jak bardzo Ci zalezy na tym, szukaj kontaktu do adminisytratora systemu czy dzialu technicznego, moze jednak pomoga
devnul
16.06.2008, 23:22:15
tylko oni tam chyba wykrywali bezczynność na ich stronie a nie ogólnie przy danej maszynie a to właśnie mnie interesuje
Cezar708
16.06.2008, 23:22:27
no niestety przedmówcę muszę zmartwić we "wubeku" to działa jedynie wtedy gdy okno jest aktywne, a autorowi nie o to chyba chodzi...
Pozdrawiam
tommy4
17.06.2008, 08:14:29
Może po prostu sprawdź pozycję kursora myszy. Wydaje mi się, że przeglądarka zwróci undefined, jeśli okno jest nieaktywne, lub po prostu nie będzie zmieniać wartości x i y kursora. A wtedy jak wiadomo - użytkownik nie robi nic.
Pytanie tylko, czy przeglądarka całkowicie nie zastopuje javascriptu podczas gdy okno jest nieaktywne.
Wygooglowałem też trochę:
http://www.webmasterworld.com/javascript/3458708.htm
sniezny_wilk
17.06.2008, 08:22:19
Cytat(tommy4 @ 17.06.2008, 07:14:29 )

Może po prostu sprawdź pozycję kursora myszy. Wydaje mi się, że przeglądarka zwróci undefined, jeśli okno jest nieaktywne, lub po prostu nie będzie zmieniać wartości x i y kursora. A wtedy jak wiadomo - użytkownik nie robi nic.
Pytanie tylko, czy przeglądarka całkowicie nie zastopuje javascriptu podczas gdy okno jest nieaktywne.
Wygooglowałem też trochę:
http://www.webmasterworld.com/javascript/3458708.htmOj wątpię bardzo w to co mówisz. Jak chcesz sprawdzić pozycję kursora, jak przeglądarka jest zminimalizowana ? Odczyta pozycję kursora ale na stronie.
devnul
17.06.2008, 10:08:26
@sniezny_wilk: dokładnie. A to mnie nie urządza - zresztą - to żaden problem odczytać wartości z aktywnego okna
@tommy4: czytaj ze zrozumieniem. Problem polega właśnie na tym że chcę przechwycić informacje o braku aktywności usera ogólnie przy komputerze a nie tylko na danej stronie.
mike
17.06.2008, 10:10:38
~devnul zdecydowanie powinieneś przyjąć do wiadomości, że to nie jest możliwe.
sniezny_wilk
17.06.2008, 10:18:09
hmm.. a może w jakiś sposób ActiveX, napisać jakiegoś? Ale to będzie tylko na windowsach działało.
devnul
17.06.2008, 10:37:45
@mike: zawsze wychodzę z założenia że nie ma rzeczy niemożliwych - są tylko takie które zajmują więcej czasu
Cytat(sniezny_wilk)
hmm.. a może w jakiś sposób ActiveX, napisać jakiegoś? Ale to będzie tylko na windowsach działało.
może i to mogło by się udać ale:
1) motyw musi działać również na systemach z pod znaku jabłka oraz systemach unixowych
2) nie chcę narzucać użytkownikom przeglądarki z jakiej mają kożystać
Shili
17.06.2008, 10:39:39
Ale oczywiście, że to jest możliwe i już o tym była mowa - potrzeba po prostu zewnętrznego komponentu instalowanego na komputerze klienckim.
mike
17.06.2008, 11:10:05
Cytat(devnul @ 17.06.2008, 11:37:45 )

@mike: zawsze wychodzę z założenia że nie ma rzeczy niemożliwych - są tylko takie które zajmują więcej czasu
Owszem, jest to możliwe ale nie bez wsparcia zewnętrznego oprogramowania lub jakiejś innej pomocy.
Niestety, są rzeczy niemożliwe. Nie ma? To ustaw ciastko z moją domeną.
devnul
17.06.2008, 14:22:57
@Shili: chodzi o rozwiązanie nie wymagające wsparcia zewnętrznego softu
@mike: z jakim kremem

- wszystko jest kwestią podejścia
qrees
17.06.2008, 19:10:53
Cytat(devnul @ 17.06.2008, 15:22:57 )

@Shili: chodzi o rozwiązanie nie wymagające wsparcia zewnętrznego softu
@mike: z jakim kremem

- wszystko jest kwestią podejścia
Nie da się... a nawet jeżeli się uda, to zaraz załatają tą dziurę w przeglądarce i już się nie będzie dało...
Nie da się za pomocą Javascriptu. Flasha, Javy, ActiveX... więc właściwie nic nie zostaje.
Poza tym, widziałeś coś takiego kiedyś na jakiejś stronie? bo ja nie... sądze, że jakby się dało to już dawno o takim rewolucyjnym rozwiązaniu byłoby głośno na całym świecie. A jak się uda to pewnie prędzej się o tym dowiesz z innych źródeł niż pisząc tutaj na forum.
devnul
18.06.2008, 18:02:05
Cytat
Poza tym, widziałeś coś takiego kiedyś na jakiejś stronie? bo ja nie... sądze, że jakby się dało to już dawno o takim rewolucyjnym rozwiązaniu byłoby głośno na całym świecie. A jak się uda to pewnie prędzej się o tym dowiesz z innych źródeł niż pisząc tutaj na forum.
Gdyby to chodziło o to że jestem zwyczajnie głodny wiedzy - najzwyczajniej w świecie jest to że tak powiem funkcja dość mocno oczekiwana w projekcie nad którym właśnie pracuję.
qrees
18.06.2008, 20:52:37
Sądzę, że dużo prościej i szybciej byłoby zastanowić się nad innym rozwiązaniem tego problemu, bo w ten sposób kręcisz się tylko w kółko.
sniezny_wilk
18.06.2008, 20:59:36
Cytat(qrees @ 18.06.2008, 19:52:37 )

Sądzę, że dużo prościej i szybciej byłoby zastanowić się nad innym rozwiązaniem tego problemu, bo w ten sposób kręcisz się tylko w kółko.
Racja, może powiedz co chcesz osiągnąć. Może da się to jakoś uprościć, ominąć, lub zastąpić
devnul
18.06.2008, 22:39:42
Cytat
Racja, może powiedz co chcesz osiągnąć. Może da się to jakoś uprościć, ominąć, lub zastąpić
wierz mi nie zajmuję się programowaniem od 2 dni - wszystko można uprościć i zasŧąpić ale to niestety nie będzie rozwiązaniem mojego problemu. Napisałem już co jest mi do szczęścia potrzebne (wykrycie bezczynności systemu polegające na braku akcji na klawiaturze lub myszy w obrębie całego środowiska pracy użytkownika [systemu operacyjnego] a nie tylko w obrębie okna przeglądarki), oraz napisałem co może być użyte w tym celu (javasctipt/flash/java[applet]), żadnych zewnętrznych programów, wtyczek itp. I jeśli ktoś chce napisać zwyczajnie że się nie da (bo taki jest stan jego wiedzy - to ja z góry podziękuję za taką odpowiedz - bo mój stan wiedzy jest na chwilę obecną podobny - nie mam pojęcia jak to rozwiązać, dlatego pytam jak a nie czy waszym zdaniem jest to możliwe.
mike
18.06.2008, 22:50:32
~devnul zrozum, że nie da się tego zrobić bez wsparcia jakimś oprogramowaniem innym niż wymieniłeś.
Znam doskonale możliwości JavaScriptu oraz Javy i jest to po prostu niewykonalne. Zrozum, że przeglądarka nie nasłuchuje systemu, to system może co najwyżej jej coś powiedzieć.
Zaczynasz się zachowywać jak kiedyś ~invx. Tysiąc ludzi na forum mu coś mówi a on swoje wie.
Więc powiem raz jeszcze: nie da się.
Owszem jest to odpowiedź na mój stan wiedzy i na możliwości przewidzenia na podstawie znajomości technologii.
Nie pasuje Ci odpowiedź: czekaj na kogoś innego, kto wie więcej i powie to samo.
Shili
18.06.2008, 22:54:09
Sprawdź sobie kod źródłowy iceweasela na przykład (pewnie wiesz, że to taki linuxowy firefoks) i sprawdź czy możesz się w takim stopniu w jakim chcesz połączyć z systemem operacyjnym. Dowiesz się wtedy przynajmniej tego czy takie rozwiązanie jest możliwe. A jak okaże się, że tak, to zachowaj to tylko dla siebie, żeby przypadkiem tego nie załatali
devnul
19.06.2008, 16:36:46
Cytat
Sprawdź sobie kod źródłowy iceweasela na przykład (pewnie wiesz, że to taki linuxowy firefoks) i sprawdź czy możesz się w takim stopniu w jakim chcesz połączyć z systemem operacyjnym. Dowiesz się wtedy przynajmniej tego czy takie rozwiązanie jest możliwe. A jak okaże się, że tak, to zachowaj to tylko dla siebie, żeby przypadkiem tego nie załatali
nie szukam dziur tylko rozwiązań pewnych
Cytat
~devnul zrozum, że nie da się tego zrobić bez wsparcia jakimś oprogramowaniem innym niż wymieniłeś.
Znam doskonale możliwości JavaScriptu oraz Javy i jest to po prostu niewykonalne. Zrozum, że przeglądarka nie nasłuchuje systemu, to system może co najwyżej jej coś powiedzieć.
Zaczynasz się zachowywać jak kiedyś ~invx. Tysiąc ludzi na forum mu coś mówi a on swoje wie.
Więc powiem raz jeszcze: nie da się.
Owszem jest to odpowiedź na mój stan wiedzy i na możliwości przewidzenia na podstawie znajomości technologii.
Nie pasuje Ci odpowiedź: czekaj na kogoś innego, kto wie więcej i powie to samo.
czy ja gdzieś mówię że przeglądarka nasłuchuje system? nie wydaje mi się.
Szkoda tylko że wątek rozrasta się a nic nowego to nie wnosi. Bo sam przyznasz że te "tysiąc" odpowiedzi w stylu nie da się nie przydadzą mi się do niczego.
dr_bonzo
19.06.2008, 17:30:35
http://ochafik.free.fr/blog/?p=98http://forum.java.sun.com/thread.jspa?thre...ssageID=9579954http://www.google.com/search?client=opera&...-8&oe=utf-8itd
Czyli nie tak prosto, nie na wszystkich systemach i nieprzenosnie
A dyskusje moze skonczyc tylko podanie rozwiazania, lub dowodu ze sie nie da, albo... moderator

No i raczej nie da sie tego zrobic bez odwolan do systemu, bo kazdy soft dziala w separacji od innych i komunikacja miedzy nimi zachodzic moze tylko jesli oba softy sie na to zgodza [TCP/IP, pamiec wspolna itp] albo jesli jest to systemowy soft, odwolujacy sie do specjalnych funkcji systemu.
edit: no i chyba sie da, sa wrappery na te funkcje systemowe, ALE czy da sie je odpalic spod appleta[ktory dziala w sandboxie, bardzo okrojonym srodowisku, dostajesz wieksze mozliwosci gdy go cyfrowo podpiszesz]
http://weblogs.java.net/blog/georgez/archi...s_jdic_goi.htmlhttps://jdic.dev.java.net/incubator/systemi...ssionIdleTime()ale czy to dziala?

bo projekt umarl w 2006
nospor
19.06.2008, 17:58:16
Cytat
Bo sam przyznasz że te "tysiąc" odpowiedzi w stylu nie da się nie przydadzą mi się do niczego.
Tak samo jak Twoje tysiąc ripost ze wszystko sie da. Skoro sie da to czekaj cierpliwie az ktos to napisze. ktos musi przerwac ten ciag: da sie, nie da sie, da sie, nie da sie, da sie, nie da sie. Tym kimś bądź np. Ty

Naprawde robi sie nudne czytanie ciągłego: da sie, nie da sie, da sie, nie da sie.....
.radex
19.06.2008, 18:52:10
hmmm.... nie znam dobrze javascriptu, ale...
jeśli można JS-em przechwycić, czy dany element jest najechany (jak :hover w css), to można by też sprawdzać cały czas po kolei wszystkie elementy i sprawdzić czy jest najechany inny element niż poprzednim razem.
Nie wiem czy tak można (wątpię), ale nawet jeśli można to nie będzie to w 100% pewne, bo równie dobrze można przesunąć myszkę o 1px
scanner
19.06.2008, 19:13:51
radex_p: czytaj ze zrozumieniem. To ma działać także przy zminimalizowanej przeglądarce.
.radex
19.06.2008, 20:10:40
Aaa to to przepraszam.
sniezny_wilk
20.06.2008, 00:11:51
@devnul - też nie zajmuje się programowaniem od dwóch dni. Ja na Twoim miejscu podszedłbym trochę inaczej do zagadnienia. Szkoda, że nie chcesz nic więcej powiedzieć co musisz wykonać, bo to by ułatwiło pomoc. Pora przyjąć do wiadomości, że się nie da zrobić tego tak jak mówisz. Nadal jestem za tym, aby obejść problem. Wykorzystałbym do tego AJAX'a, PHP i MySQL. Nie wiem co tam sobie tworzysz, ale załóżmy, że masz tam jakiś userów. Po każdym kliknięciu myszki na stronę, lub on focus itp itd (można jakiegoś frame niewidocznego wydzielić, aby skrypt miał czas się wykonać nawet jak user, szybko się przemieszcza po stronie), wysyłasz info do bazy z aktualnym czasem. Za każdym razem sprawdzasz jaki czas jest w aktualny i jaki jest w bazie, jeśli różnica > od tylu co sobie wymyślisz, to przyjmujesz, że user był "bezczynny" przez jakiś okres. Może rozwiązanie mało optymalne, ale chciałem przedstawić swój pomysł. Zarys może byłby bardziej szczegółowy, gdybyś powiedział coś więcej o tym co masz zrobić.
scanner
20.06.2008, 08:46:57
sniezny_wilk: ty też pierdoły piszesz - problemem jest wykrywanie bezczynności użytkownika w ramach całego systemu, a nie tylko jak przeglądarka jest zafocusowana.. jak ktoś się z browsera przełączył do innej aplikacji i tam coś robi to był bezczynny? Nie sądzę.
Nie wymyślajcie czegoś, co i tak jest nieprzydatne w tym temacie, bo zacznę sprzątać w tym wątku.
devnul
20.06.2008, 09:39:15
@dr_bonzo: wygląda obiecująco, przyjrzę się temu na dniach ale z tego co widzę to byłby dla mnie spory krok do przodu
@nospor: ciężko się nie zgodzić ale po dwóch lub trzech takich odpowiedziach temat by utonął a na rozwiązaniu mi jednak zależy
@sniezny_wilk: a do czego Ci jest potrzebna szersza wiedza na temat moich zamiarów? opisałem problem jak sądzę dość szczegółowo i nie ma znaczenia czy chcę na czas bezczynności wyświetlać użytkownikowi różowego misia czy też go wylogować. Problem nie polega na wykonaniu akcji ale na wykonaniu jej w odpowiednim momencie.
@wszyscy mądrzy sceptycy: jak już pokazał dr_bonzo jednak coś się tam da zrobić więc od teraz prosiłbym chociaż o brak wypowiedzi w tonie "nie da się"
nie ukrywam że jeśli ktoś jeszcze ma coś ciekawego do powiedzenia na temat to przyjmę go z otwartymi rękoma.
dr_bonzo
20.06.2008, 10:31:46
@devnul: poczatkowo uwazalem ze sie nie da, ale postanowilem pogooglowac, co ty powienienes sam, na poczatku zrobic, to bys doszedl do tych samych linkow, no i nie wiadomo czy sie da [trzeba sprawdzic ta technologie w praktyce].
devnul
20.06.2008, 11:53:34
@dr_bonzo: wierz mi googlam za tym od dość długiego czasu ale internet długi i szeroki i najzwyczajniej w świecie nie dokopałem się tam
Archbishop
14.10.2008, 14:51:53
Poniewaz sam ostatnio szukam podobnych rozwiazan, wiec podbijam.
Znalazlem tylko cos takiego:
http://bytes.com/forum/thread502242.htmlhttp://www.experts-exchange.com/Programmin...Q_21553336.htmlMoze to Ci cos pomoze
devnul
14.10.2008, 17:15:29
@Archbishop: dzięki za zainteresowanie jednak te rozwiązania tyczą się nie bezczynności użytkownika a zmiany stanu okna przeglądarki z daną stroną także pomijając fakt że nic odkrywczego tam nie ma nie są pomocne w moim przypadku.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.