gpt4 book ai didi

javascript - Chrome/Safari 在某些情况下不调用卸载

转载 作者:数据小太阳 更新时间:2023-10-29 05:11:07 25 4
gpt4 key购买 nike

几天来一直被这个问题困扰,真的需要,并且会很感激一些帮助。我的要求是,当用户离开我们的页面而不单击注销时,我想进行服务器端回调以清除一些对象。出于商业原因,我们的 ASP.NET session 超时必须设置为非常高的值。此外,我不想弹出警告/对话框来强制用户返回页面并单击注销。

到目前为止,我找到的解决方案是通过在页面中嵌入此 javascript 来进行 AJAX 回调。

window.onunload = pageleave;
function pageleave() {
alert('test');
PageMethods.CheckLogout('abc','xyz',OnSucceed,OnFail);
}

问题是:对于 IE 和 Firefox,卸载会触发,会看到警报,并且在我希望的所有情况下,我都会在 C# 端看到回调

    a)  User closes browser 
b) User types in a new URL in the address bar
c) User clicks on a link causing page to reload

对于 Chrome 和 Safari,情况 a 和 b 工作正常。但是,当用户单击导致我的 aspx 页面重新加载的链接时,不会调用我的 C# 端代码。虽然 javasacript 警报被触发。

我正在尝试了解如何让 Chrome/Safari 像 IE/Firefox 一样运行。这有可能吗?

在此先感谢您的帮助,

拉杰什。

最佳答案

使用 beforeunload 事件而不是 unload 事件。

此外,使用同步 AJAX 请求,而不是异步请求,以便请求在 beforeunload 函数退出之前完成。

我不确定您将如何使用 JavaScript 框架执行同步 AJAX 请求。在 jQuery 中,它看起来像这样:

window.onbeforeunload = function() {
jQuery.ajax({
url: '/page/to/load',
async: false
});
};

关于javascript - Chrome/Safari 在某些情况下不调用卸载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5124620/

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