1

我的网站是基于 AJAX 的,所以我有一个window.onbeforeunload = function(){};. 但是,我有 mailto 链接,当我单击这些 mailto 链接时,会弹出确认重新加载,这是我不喜欢的。有没有办法写一个函数去掉window.onbeforeunload = function(){};,从mailto链接拉出邮件编辑器,然后放window.onbeforeunload = function(){};回去?

谢谢

4

1 回答 1

0

您可以在锚点之后添加这样的脚本:

<a href="mailto: example@address.com">Mail</a>
<script>
  (function(w, d){
    var anchors = d.getElementsByTagName('a');
    var a = anchors[anchors.length - 1];

    a.onclick = function(){
      var old_unload = w.onbeforeunload;
      w.onbeforeunload = null;

      w.location = a.href;

      setTimeout(function(){
        w.onbeforeunload = old_unload;
      }, 0);

      return false;
    };

  })(window, document);
</script>

JSFiddle 演示

注意:第一个版本不起作用,因为w.onbeforeunload = old_unload在浏览器更改为mailto页面之前正在运行。使用setTimeout异步赋值可以解决这个问题。

于 2013-07-10T23:03:16.410 回答