JavaScript问题:Onbeforeunload还是Onunload?

时间:2010-09-23 05:05:45

标签: javascript dom javascript-events

因此,我希望在刷新页面或用户退出页面以供将来使用时,将某些信息存储在浏览器的localstorage中。我想我会使用一些Javascript来检测事件并存储页面访问的状态。

现在我的困境是:我应该使用Onbeforeunload或Onunload方法来实现这个目标吗?

由于

4 个答案:

答案 0 :(得分:20)

为什么不注册它只是为了安全起见?只需让监听器检查数据是否已存储并提前退出。

以下是使用事件属性的快速示例:

window.onunload = window.onbeforeunload = (function(){

  var didMyThingYet=false;

  return function(){
    if (didMyThingYet) return;
    didMyThingYet=true;
    // do your thing here...
  }

}());

或者您可以使用attachEvent:

(function(){

  var didMyThingYet=false;

  function listener (){
    if (didMyThingYet) return;
    didMyThingYet=true;
    // do your thing here...
  }

  window.attachEvent("onbeforeunload", listener);
  window.attachEvent("onunload", listener);    

}());

答案 1 :(得分:8)

正确的地方是onunload。 onbeforenload意味着在您可能需要阻止用户离开页面时使用,例如当存在未保存的数据时。

我会厌倦编写代码来涵盖所有案例,因为你不愿意测试所有案例。如果您进行研究并发现它在浏览器中过于复杂,是的,请继续并尽可能多地做。但是,我相信在onunload上进行本地存储没有问题。我确实遇到了一个问题,试图将信息发送到服务器onunload。这在浏览器中并没有可靠地发生,所以我最终得到的方法是使用卸载和beforeunload,但只是在尽职调查之后。

所以我的建议是onunload,检查所有浏览器。

答案 2 :(得分:0)

我相信Onbeforeunload是一个安全的赌注。浏览器可能无法完全执行onunload脚本 - 例如,如果onunload中有警报,则关闭窗口时不会显示chrome。

答案 3 :(得分:0)

根据我的经验:使用onunload,因为Opera不支持其他事件。是的,我知道...... Opera ......但仍然:)