有没有人知道如何在OnBeforeUnload事件中检测到服务器端代码发送了Response.Redirect?我想提示用户阻止他们在某个时间之前离开页面,但是当服务器重定向时我不应该提示用户。
我正在使用广泛使用Response.Redirect的遗留代码,我对改变重定向发生的方式不感兴趣。请不要建议我使用X重定向方法。
应该可以根据XMLHttpRequest对象中的响应代码执行此操作,因为响应重定向应该发送回302.
编辑:Response.Redirect发回200,主体中有一个重定向代码,然后在ASP.Net代码中执行window.location.href =新页面。有没有办法获得服务器响应以确定是否发生了这种情况?
提前感谢您的帮助!
答案 0 :(得分:6)
我找到了解决方案。
当PageRequestManager处理来自服务器的响应时,它将设置_processingRequest标志。为了让response.redirect能够通过,我改变了我的javascript以检查它。该事件现在看起来像这样:
window.onbeforeunload = function() {
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (!prm._processingRequest){
return "Are you sure you want to leave?";
}
};
答案 1 :(得分:0)
对于非ajax页面,你运气不好,因为页面从未发送到浏览器,只有302标题。因此,没有机会对OnBeforeUnload进行javascript处理。
使用ASP.NET AJAX,Response.Redirect实际上不会执行302.它通过XMLHttpRequest发回消息,ASP.NET AJAX正在模拟302.理论上,您可以截取此消息并执行自己的处理。 ..
答案 2 :(得分:0)
是的,Response.Redirect
有一个重载,可让您决定是否终止请求(提出ThreadAbortException
)。如果你让Response
完成(传递假为第二个参数); OnBeforeUnload
也将运行。
但是,在这种情况下,简单地运行OnBeforeUnload
将无法帮助您,因为您的客户端代码(提示)将在新页面发送到浏览器之前运行(如果您重定向,它将会也只是302标题,而不是真实的页面。)
我会使用AJAX查询服务器,如果它报告要完成的操作,请允许重定向Javascript代码。