2010-10-19 108 views
1

我一直在寻找一段时间,并没有完全找到我一直在寻找的东西。 我的网页存储报告,用户可以保存这些报告。确认浏览器退出/浏览器退出技巧

我正在寻找一种方法,使用jquery或javascript onunload/onbeforeunload来询问用户是否希望保存报告,或者在浏览器关闭/导航时继续保存而不保存。

使用onbeforeunload我可以让用户停止导航并手动保存,但我宁愿通过对话框完成保存。 onbeforeunload的另一个问题是点击标签也会调用onbeforeunload方法。

保存是异步的,需要几毫秒。

欢迎任何建议。

Regards, Byron Cobb。

+1

为什么不总是保存,而不烦人用户,并允许下次用户显示页面时轻松撤消? “上次关闭页面时,报告自动保存为[撤消]” – 2010-10-19 09:32:08

+0

问题在于,用户还可以创建新报告,并在保存时必须命名报告。我正在考虑这些方面。 – Bob 2010-10-19 09:37:57

回答

2

这可能是唯一一次有一个syncronized Ajax调用是合理的。

window.onbeforeunload = function(){ 
    $.ajax({ 
     url:  'somewhere', 
     type:  'POST', 
     dataType: 'text', 
     async: false, 
     data:  'you_data_here', 
     success: function(data){ 
     } 
    }); 
}; 

这样,你应该能够将数据的一些ammout转移到你的服务器,而浏览器阻止卸载。这有一些缺点。最明显的是,根据要传输多少数据以及需要多长时间,这可能不是那么棒的用户体验。
另一个是这种方法在某些(较旧的)浏览器中不可用。

一个很好的选择是可能不时自动保存您的数据或每次操作后。

+0

如果保存功能尚未被其他功能所依赖,我会高兴地将其更改为同步。我想如果这是唯一的方法,我应该考虑更改代码。 – Bob 2010-10-19 09:40:27

2
 $(document).ready(function() { 
      //below turns off popup on a tags, buttons, :input is for a submit in ie and img tags 
      $("a").click(RemoveUnload); 
      $("button").click(RemoveUnload); 
      $(":input").click(RemoveUnload); 
      $("img").click(RemoveUnload); 
     }); 

     RemoveUnload(){window.onbeforeunload = null;}