2013-06-19 22 views
12

Próbuję opublikować dane, gdy użytkownik opuści moją stronę. W końcu udało mi się znaleźć działający, ale jednak pojawia się okno dialogowe, gdy użytkownik opuszcza. Próbowałem return null;, ale nie działał. Czy można wyłączyć okno dialogowe?Korzystanie z polecenia onbeforeunload bez okna dialogowego?

window.onbeforeunload = function() { 

$.post("track.php", { 
async: false, 
refid: refid, 
country: country, 
type: type, 
}); 

return ''; 

} 
+1

Nie zwracaj niczego? – SeinopSys

+0

Musisz użyć zwrotu na window.onbeforeunload :( – user198989

+0

Być może istnieje obejście, pozwól mi przetestować. Przypuszczam, że twoje pytanie jest następujące: http://stackoverflow.com/questions/17169092/correct-way-to -use-onbeforeunload poprawny? –

Odpowiedz

28

Z Mozilla Developer Network page:

Kiedy to wydarzenie zwraca non-void wartość, użytkownik jest proszony o potwierdź zwolnienie strony.

Oznacza to, że wartość powrotu przewodnika musi być undefined (nie '', false lub null), w celu uniknięcia wywoływania wiersz potwierdzenia.

window.onbeforeunload = function() { 

    $.post("track.php", { 
    ... 
    }); 

    return undefined; 
} 

W javascript można całkowicie pominąć wartość zwracaną, aby uzyskać ten sam wynik.

W coffeescript z jQuery to coś

$(document).ready -> 
    $(window).bind('beforeunload', -> 
    #put your cleanup code here 
    undefined 
) 
2

mógłbyś to sprawdzić:

$(window).on('beforeunload', function (e) { 
    if (e.originalEvent) $.post("track.php", { 
     async: false, 
     refid: refid, 
     country: country, 
     type: type, 
    }); 
    else $.get("", { 
     async: false 
    }); 
    $(this).trigger('beforeunload'); 
} 

To stworzy wiele niepotrzebnych żądań, ale powinien dać swoje pierwsze żądanie wystarczająco dużo czasu, aby połączyć się z serwerem.

+0

Dzięki, w końcu znalazłem rozwiązanie, bind beforeunload powinien być bind onbeforeunload – user198989

+0

masz na myśli: $ (window) .bind ('onbeforeunload', ...) ??? Ponieważ używanie tego nie powinno działać w ogóle. W każdym razie, jeśli masz poprawne obejście, proszę opublikuj to jako odpowiedź –

+0

To działa. Próbowałem na firefoxie , chrome i explorer Wszystko zadziałało – user198989

0

znalazłem bardzo prosty trik, aby uzyskać tę pracę z użyciem

$(window).bind('onbeforeunload', function() { 

$.post("track.php", { 
async: false, 
refid: refid, 
country: country, 
type: type, 
}); 

}); 
+0

dla mnie, nie działa w żadnej przeglądarce: http://jsfiddle.net/hDZY6/ –

+2

Ok, może używasz starszej wersji jquery ponieważ teraz: << Uwaga t kapelusz nie jest już "włączony" w przypadku związania. Używanie poprzedniego onbeforeunload w późniejszych wersjach jQuery nie spowoduje niczego. >> –

+0

Używam tego samego podejścia, w którym kod pocztowy nie zostanie uruchomiony bez zwrotu –

2

Jeśli chcesz wyłączyć okno, proszę pisać tylko

window.onbeforeunload = function() { ... return; }

zamiast

window.onbeforeunload = function() { ... return ''; }.

Mam nadzieję, że ci to pomoże.

Powiązane problemy