Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ajax onunload onbeforeunload
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
robert1974
probuje na onunload zapisac do bazy ze user opuszcza strone. testuje z Chrome.

przed </body> dodalem cos takiego:

<script>
function ActionUnload()
{
var xmlhttp=new XMLHttpRequest();

xmlhttp.open("GET","storeUnloadAction.php?ref_url="+document.referrer,false);
xmlhttp.send();
}

window.onbeforeunload = function()
{
ActionUnload();
);

</script>

ale nie dziala.
tutaj: xmlhttp.open("GET","storeUnloadAction.php?ref_url="+document.referrer,false);
probuje i z false i z true

trueblue
window.onbeforeunload = function()
{
ActionUnload();
);

Jeśli testujesz na Chrome, to używaj konsoli (F12), dużo Ci ułatwi.
robert1974
wlasnie chwile pozniej znalazlem tan blad, .... tylko teraz nie wiem czemu od razu po otwarciu strony ten event sie wykonuje, i od razu zapisuje sie do bazy wyjscie.

consoli F12, niech no ja to ogarne.

wyglada ze i window.onbeforeunload i window.unload wywoluja mi sie od razu, albo czegos nie rozumiem.



window.unload = function()
{
ActionUnload();

};


window.onbeforeunload = function()
{
ActionUnload();

};

trueblue
Nie wykonują się od razu, ale w minimalnym odstępie.
Czemu przypinasz funkcję do dwóch zdarzeń?
robert1974
chodzilo mi o to, ze czy wywolam jedna czy druga to i tak wykonanie nastepuje od razu przy zaladowaniu strony, a ja bym oczekiwal ze to sie wykona dopiero jak wyjde ze strony na jakas inna.
tzm
Cytat(trueblue @ 28.01.2015, 22:12:33 ) *
Czemu przypinasz funkcję do dwóch zdarzeń?


A co w tym dziwnego?
trueblue
window.unload = function()
powinno być
window.onunload = function()


Wprowadź alerty, zerknij czy również są wywoływane przy załadowaniu strony, a nie jej opuszczeniu.
robert1974
uff, dziala:

<script>
function ActionUnload()
{
var xmlhttp=new XMLHttpRequest();

xmlhttp.open("GET","storeUnloadAction.php?ref_url="+document.referrer,false);
xmlhttp.send();
}

window.onunload = function()
{
ActionUnload();

};

</script>

z tego co czytam onunload wszystkie przegladarki obsluguja czyli powinno byc OK.

a skad pobiore na ktora (inna) strone wyszedl?







mam jeszcze pytanie zwiazane, choc moze powinienem stworzyc nowy post.


w tej linii kodu podaje nazwe skryptu storeUnloadAction.php albo cos takiego ../moje_skrypty/storeUnloadAction.php

--> xmlhttp.open("GET","storeUnloadAction.php?ref_url="+document.referrer,false);


jesli ktos zobaczy kod strony to wie gdzie znajduje sie dany skrypt php i jak go wywolywac.

jesli dobrze rozumiem, to nie moze zobaczyc jego kodu php, ale czy moze wylistowac wszystkie skrytpy php z katalogu "moje_skrypty" i czy moze je wywolac samodzielnie?

jak sie nalezy przed tym zabezpieczyc?

trueblue
Cytat(robert1974 @ 29.01.2015, 00:43:56 ) *
a skad pobiore na ktora (inna) strone wyszedl?

Już kiedyś o to pytałeś. Nie ma takiej możliwości, chyba, że kliknął w link na Twojej stronie.
Cytat(robert1974 @ 29.01.2015, 00:43:56 ) *
jesli dobrze rozumiem, to nie moze zobaczyc jego kodu php, ale czy moze wylistowac wszystkie skrytpy php z katalogu "moje_skrypty" i czy moze je wywolac samodzielnie?

jak sie nalezy przed tym zabezpieczyc?

http://stackoverflow.com/a/1607587
robert1974
to prawda, tylko zobacz, tako sobie mysle, ... jest takie narzedzie feedjit ktore monitoruje ruch, dodaje go na strone jako pare linijek kodu a on potrafi zebrac info skad ktos przyszedl (to juz mam) ale tez na jaka strone wyszedl (wewnetrze, to prawda, ale rozne) wiec myslalem ze gdzies tu cholerstwo musi byc.

przyklad: http://live.feedjit.com/live/harmonicstube.blogspot.com/0/

dziekuje trueblue

poniewaz moj monitor chodzi juz ponad tydzien to krotki update z obserwacji:
1. rozwiazanie z window.onunload sprawuje sie niezle. 95% wyjsc zapisuje sie do bazy. 5% nie, i jeszcze nie rozgryzlem w jakich przypadkach nie. Wydaje mi sie iz nie jest to skorelowane z typem przegladarki czy OS.

2. przy opuszczaniu strony nie wiem wciaz skad pobrac link gdzie uzytkownik wyszedl, aczkowlwiek ... problem sie sam rozwiazal, poniwaz gdy wyszedl na jakas strone wewnatrzna ktora tez monitoruje to dla niej juz zapisuje sie skad wszedl (a zatem wiadomo skad wyszedl i gdzie wszedl) smile.gif

3. pare razy zdarzylo sie, ze uzytkownik wszedl na 4 rozne pod-strony serwisu w tej samej sekundzie, nie wiem jak to mozliwe, ale tak to sie zarejestrowalo.

pozdrawiam
trueblue
ad.1 Nie wszystkie przeglądarki/wersje obsługują to zdarzenie. Spróbuj użyć beforeunload, choć nie wiem czy to jakoś wpłynie na wyniki - najzwyczajniej jeśli ajax zostanie przerwany zanim połączy się z serwerem, to fakt nie będzie odnotowany. Możesz jeszcze spróbować z: http://php.net/manual/en/function.ignore-user-abort.php
ad.2 Próbuję Cię przekonać, że nie jest to możliwe.
ad.3 Robot?

Co do punktu 1., kiedyś tworzyłem takie fake rozwiązanie. Sprawdzana była pozycja kursora myszy, jeśli był 10 pikseli od górnej krawędzi, to było to traktowane jako fakt wyjścia ze strony. Niezbyt wyrafinowane, ale takowego nie wymagało.
robert1974
Cytat(trueblue @ 2.02.2015, 18:38:55 ) *
ad.1 Nie wszystkie przeglądarki/wersje obsługują to zdarzenie. Spróbuj użyć beforeunload, choć nie wiem czy to jakoś wpłynie na wyniki - najzwyczajniej jeśli ajax zostanie przerwany zanim połączy się z serwerem, to fakt nie będzie odnotowany. Możesz jeszcze spróbować z: http://php.net/manual/en/function.ignore-user-abort.php
ad.2 Próbuję Cię przekonać, że nie jest to możliwe.
ad.3 Robot?

Co do punktu 1., kiedyś tworzyłem takie fake rozwiązanie. Sprawdzana była pozycja kursora myszy, jeśli był 10 pikseli od górnej krawędzi, to było to traktowane jako fakt wyjścia ze strony. Niezbyt wyrafinowane, ale takowego nie wymagało.


ad1. tak, o tym czytalem. Tylko ze na ta chwile nie znalazlem wzorca : kiedy dziala/niedziala dla jakiej konkretnej przegladarki czy OS. Ale wrzuce tego ajaxa dla obu eventow ZAWSZE ... a niech tam, zobaczymy czy sie poprawi.

ad2. no przekonales ... to co jest teraz wystarcza mi smile.gif

ad3 ... zignoruje na razie.
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.