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

Raj*_*esh 6 javascript asp.net ajax

几天来一直坚持这个问题,真的需要,并希望得到一些帮助.我的要求是,当用户导航离开我们的页面时,我想进行服务器端回调以清除某些对象,而不单击注销.出于商业原因,我们的ASP.NET会话超时必须设置为非常高的值.此外,我不想弹出警报/对话框以强制用户返回页面并单击"注销".

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

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

这是问题所在:对于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
Run Code Online (Sandbox Code Playgroud)

对于Chrome和Safari,案例a和b工作正常.但是,当用户单击链接时,会导致我的aspx页面重新加载,我的C#端代码不会被调用.但javasacript警报被解雇了.

我试图了解如何让Chrome/Safari像IE/Firefox一样运行.这有可能吗?

在此先感谢您的帮助,

拉杰什.

Mar*_*ich 8

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

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

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

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

  • 我认为只有后一个建议 - 使用同步ajax请求 - 是必要的.`beforeunload`事件用于确认用户实际想要离开页面. (3认同)