我正在尝试在用户离开我的网页时发布数据。我终于找到了一个可行的解决方案,但是,当用户离开时,它会显示一个确认对话框。我试过了return null;
但它没有用。是否可以禁用对话框?
window.onbeforeunload = function() {
$.post("track.php", {
async: false,
refid: refid,
country: country,
type: type,
});
return '';
}
答案 0 :(得分:36)
来自Mozilla Developer Network page:
当此事件返回非void值时,系统会提示用户 确认页面卸载。
这意味着处理程序的返回值必须为undefined
(不是''
,false
或null
),以避免触发确认提示。
window.onbeforeunload = function() {
$.post("track.php", {
...
});
return undefined;
}
在javascript中,您可以完全跳过返回值以获得相同的结果。
在使用jquery的coffeescript中,它就像
$(document).ready ->
$(window).bind('beforeunload', ->
#put your cleanup code here
undefined
)
答案 1 :(得分:5)
如果您想禁用该对话框,请只写
window.onbeforeunload = function() {
...
return;
}
而不是
window.onbeforeunload = function() {
...
return '';
}
。
我希望它会对你有所帮助。
答案 2 :(得分:2)
你可以测试一下:
$(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');
}
这会产生许多无用的请求,但应该让您第一次请求有足够的时间到达服务器。
答案 3 :(得分:2)
删除return
语句对我也有用。
答案 4 :(得分:0)
我找到了一个非常简单的技巧,可以使用
$(window).bind('onbeforeunload', function () {
$.post("track.php", {
async: false,
refid: refid,
country: country,
type: type,
});
});
答案 5 :(得分:0)
这是用反应和打字稿:
useEffect(() => {
window.onbeforeunload = (ev: any) => {
ev.preventDefault()
anotherMethod()
}
}, [])