gpt4 book ai didi

javascript - Chrome 中的 window.onbeforeunload ajax 请求

转载 作者:行者123 更新时间:2023-11-28 04:49:26 26 4
gpt4 key购买 nike

我有一个网页,可以通过 Ajax 处理机器的远程控制。当用户离开页面时,我想自动断开与计算机的连接。所以这是代码:

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

断开连接函数只是将 HTTP GET 请求发送到 PHP 服务器端脚本,该脚本执行断开连接的实际工作:

function bas_disconnect_only () {
var xhr = bas_send_request("req=10", function () {
});
}

这在 FireFox 中运行良好。但对于 Chrome,ajax 请求根本不会发送。有一个 Not Acceptable 解决方法:在回调函数中添加警报:

function bas_disconnect_only () {
var xhr = bas_send_request("req=10", function () {
alert("You're been automatically disconnected.");
});
}

添加警报调用后,请求将成功发送。但正如您所看到的,这根本不是一个真正的解决方法。

有人可以告诉我这是否可以通过 Chrome 实现吗?我正在做的事情在我看来完全合法。

谢谢

最佳答案

这与较新版本的 Chrome 相关。

喜欢@Garry English said ,在页面 onunload 期间发送 async 请求将不起作用,因为浏览器会在发送请求之前终止线程。不过,发送同步请求应该可以。

在 Chrome 版本 29 之前这是正确的,但在 Chrome V 30 上它突然停止工作 as stated here .

目前看来,执行此操作的唯一方法是使用 onbeforeunload 事件 as suggested here .

但请注意:其他浏览器根本不允许您在 onbeforeunload 事件中发送 Ajax 请求。所以你要做的就是在 unload 和 beforeunload 中执行该操作,并检查它是否已经发生。

类似这样的事情:

var _wasPageCleanedUp = false;
function pageCleanup()
{
if (!_wasPageCleanedUp)
{
$.ajax({
type: 'GET',
async: false,
url: 'SomeUrl.com/PageCleanup?id=123',
success: function ()
{
_wasPageCleanedUp = true;
}
});
}
}


$(window).on('beforeunload', function ()
{
//this will work only for Chrome
pageCleanup();
});

$(window).on("unload", function ()
{
//this will work for other browsers
pageCleanup();
});

关于javascript - Chrome 中的 window.onbeforeunload ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43063590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com