I\'m trying to post data when a user leaves my page. I have finally managed to find a working solution, however, it shows a confirmation dialog when the user leaves. I have
From the Mozilla Developer Network page:
When this event returns a non-void value, the user is prompted to confirm the page unload.
This means the return value of the handler must be undefined
(not ''
, false
, or null
) in order to avoid triggering the confirmation prompt.
window.onbeforeunload = function() {
$.post("track.php", {
...
});
return undefined;
}
In javascript you can skip the return value altogether to get the same result.
In coffeescript with jquery it's something like
$(document).ready ->
$(window).bind('beforeunload', ->
#put your cleanup code here
undefined
)
I have found a really simple trick to get this working with using
$(window).bind('onbeforeunload', function () {
$.post("track.php", {
async: false,
refid: refid,
country: country,
type: type,
});
});
Could you test this:
$(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');
}
This will create many useless requests but should let your first request enough time to reach server.
If you want to disable the dialog, please only write
window.onbeforeunload = function() {
...
return;
}
instead of
window.onbeforeunload = function() {
...
return '';
}
.
I hope it will help you.
Removing return
statement worked for me also.