现在已经坚持这个问题几天了,真的需要,并希望得到一些帮助。我的要求是,当用户导航离开我们的页面时,我想进行服务器端回调以清除某些对象,而不单击注销。出于商业原因,我们的ASP.NET会话超时必须设置为非常高的值。此外,我不想弹出警告/对话框以强制用户返回页面并单击“注销”。
我到目前为止所提出的解决方案是通过在页面中嵌入此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一样运行。这甚至可能吗?
提前感谢您的帮助,
拉杰什。
答案 0 :(得分:8)
使用beforeunload事件而不是unload事件。
此外,使用同步AJAX请求,而不是异步请求,以便在beforeunload函数退出之前完成请求。
我不确定如何使用JavaScript框架执行同步AJAX请求。在jQuery中,它看起来像这样:
window.onbeforeunload = function() {
jQuery.ajax({
url: '/page/to/load',
async: false
});
};
答案 1 :(得分:1)
如果将来有人遇到这种情况,我就无法使用window.onbeforeunload
,因为它过早发射。相反,我发现window.onpagehide
是一种合适的解决方法。
e.g。
window.onpagehide = function() {
// some code here.
};