2012-05-21 24 views
13

Mam ten prosty kawałek kodu -'beforeunload' Chrome Wydanie

$(window).bind('beforeunload', function(){ 
    alert("Good Bye") 
}); 

świetnie współpracuje z Firefox, IE8, ale nie w Chrome. Czy jest to znany problem, czy jest na to alternatywa?

W rzeczywistości próbuję rejestrować szczegóły, gdy użytkownik próbuje zamknąć przeglądarkę.

function LogTime() 
{ 
    jQuery.ajax({ 
     type: "POST", 
     url: "log.php", 
     data: "", 
     cache: false, 
     success: function(response) 
     { 
     } 
    ); 
} 

$(window).bind('beforeunload', function(){ 
    LogTime(); 
}); 

To działa dobrze w Firefox, ale nie w Chrome

+1

Dialogi są blokowane dla 'onbeforeunload' w Chrome, ponieważ Chrome zdecydowała się to zrobić. – Joseph

+0

Zespół Google Chromium zdecydowanie zaleca, aby ** nie ** używać okien dialogowych JavaScript ('alert()', 'confirm()' i 'prompt()'), ponieważ informują, że szkodzą one użytkownikom, więc prawdopodobnie dlatego blokują bez interakcji użytkownika: https://developers.google.com/web/updates/2017/03/dialogs-policy Zalecają korzystanie z interfejsu API powiadomień: https://developer.mozilla.org/en-US/ docs/Web/API/Notifications_API –

Odpowiedz

13

Zwraca ciąg zamiast:

$(window).on('beforeunload', function(){ 
    return "Good bye"; 
});​ 
+0

Zmieniłem moje pytanie. Sprawdź, czy możliwe jest rozwiązanie. – skos

+0

@Sachyn Nie znam żadnego rozwiązania. Próbowałem tylko kilku prób wysłania danych asynchronicznych, ale ruch jest blokowany przez Chrome. – Sampson

+0

Dobrze. Nawet nie mogę tego zrobić w Chrome. Dziękuję za twoje wysiłki. – skos

6

Spróbuj poniżej:

$(window).on('beforeunload', function(){ 
    return "Good Bye"; 
}); 
+1

Nie rozumiem. gdzie jest używane "Good Bye". – Abhi

+0

Na dzień 09/10/17 w wersji Chrome 61.0.3163.100 (wersja oficjalna) (wersja 32-bitowa) nie jest to:/ – user1063287

4

musiałem umieścić go w sposób jQuery (document) .ready, aby działał w chrome

<script> 
    jQuery(document).ready( 
    function() { 
     jQuery(window).bind('beforeunload', 
     function (e) { 

      [code here] 

     } 
    ); 

    } 
); 
</script> 
2

Spróbuj tego:

function LogTime(){ 

jQuery.ajax({ 
    type: "POST", 
    url: "log.php", 
    data: "", 
    cache: false, 
    success: function(response){ 

    } 
}); 

}

$(window).bind('beforeunload', function(){ 
    LogTime(); 
    return "You're leaving?"; 
}); 

Wydaje się, że tak długo, jak wrócisz ciąg w tym przypadku na koniec ciała funkcji, można uruchomić kod przed tego łańcucha .

1

Spróbuj tego dla wszystkich przeglądarek: -

window.addEventListener("beforeunload", function (e) { 

    var confirmationMessage = "\o/";  
    e.returnValue = confirmationMessage;   
    return confirmationMessage;  

}); 
+0

https://developer.mozilla.org/en-US/docs/ Web/Wydarzenia/beforeunload –

0

Jeśli trzeba wysłać jakieś dane analityczne tuż przed rozładunkiem dokument, wybierz navigator.sendBeacon() metodę zamiast XMLHttpRequest.

Metoda sendBeacon() została zaprojektowana do wykonywania nieblokujących wysyłek niewielkiej ilości danych.

Najpierw sprawdź: canIuse report, ponieważ metoda nie jest jeszcze obsługiwana globalnie.