在没有对话框的情况下使用 onbeforeunload?
Posted
技术标签:
【中文标题】在没有对话框的情况下使用 onbeforeunload?【英文标题】:Using onbeforeunload without dialog? 【发布时间】:2013-06-15 19:11:44 【问题描述】:我正在尝试在用户离开我的页面时发布数据。我终于设法找到了一个可行的解决方案,但是,当用户离开时,它会显示一个确认对话框。我试过return null;
,但没用。是否可以禁用对话框?
window.onbeforeunload = function()
$.post("track.php",
async: false,
refid: refid,
country: country,
type: type,
);
return '';
【问题讨论】:
不返回任何东西? 您需要在 window.onbeforeunload 上使用 return :( 也许有解决方法,让我测试一下。我想你的问题是这个问题:***.com/questions/17169092/… 正确吗? 这个可行,但唯一的问题是它会弹出一个对话框,好吗?有不同的问题。 【参考方案1】:来自Mozilla Developer Network page:
当此事件返回一个非空值时,提示用户 确认页面卸载。
这意味着处理程序的返回值必须是undefined
(而不是''
、false
或null
)以避免触发确认提示。
window.onbeforeunload = function()
$.post("track.php",
...
);
return undefined;
在 javascript 中,您可以完全跳过返回值以获得相同的结果。
在带有 jquery 的咖啡脚本中,它类似于
$(document).ready ->
$(window).bind('beforeunload', ->
#put your cleanup code here
undefined
)
【讨论】:
有关信息,“beforeunload”事件对于数据操作是不可靠的。主要目标只是在离开网页之前显示一条警报消息:***.com/questions/9943220/…【参考方案2】:如果你想禁用对话框,请只写
window.onbeforeunload = function()
...
return;
而不是
window.onbeforeunload = function()
...
return '';
.
希望对你有帮助。
【讨论】:
【参考方案3】:删除 return
语句也对我有用。
【讨论】:
【参考方案4】:你能测试一下吗:
$(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');
这将创建许多无用的请求,但应该让您的第一个请求有足够的时间到达服务器。
【讨论】:
谢谢,终于找到解决办法了,bind beforeunload应该是bind onbeforeunload。 你的意思是:$(window).bind('onbeforeunload',...) ???因为使用它根本不应该工作。无论如何,如果您有正确的解决方法,请将其发布为答案。 它有效。我试过火狐、chrome和资源管理器。一切正常。【参考方案5】:我找到了一个非常简单的技巧来使用它
$(window).bind('onbeforeunload', function ()
$.post("track.php",
async: false,
refid: refid,
country: country,
type: type,
);
);
【讨论】:
好吧,也许你正在使用旧版本的 jquery,因为现在:> 我用的是同样的方法把post code没有return就不会触发【参考方案6】:这是使用 react 和 typescript:
useEffect(() =>
window.onbeforeunload = (ev: any) =>
ev.preventDefault()
anotherMethod()
, [])
【讨论】:
以上是关于在没有对话框的情况下使用 onbeforeunload?的主要内容,如果未能解决你的问题,请参考以下文章
jquery UI 对话框:如何在没有标题栏的情况下进行初始化?