【问题标题】:how to trigger a function on window close using angularjs如何使用angularjs触发关闭窗口的功能
【发布时间】:2015-08-01 10:49:42
【问题描述】:

我需要在用户关闭应用时执行一个函数,但是需要考虑以下几点:

  • 我需要执行一个service的函数,然后...
  • ... 一个超出范围的基于纯 JavaScript 的函数不太可能是 在这里有用
  • 当我使用路由时,范围内的onLocationChangeSuccess 绑定是 也没用

因此这个解决方案不起作用:https://stackoverflow.com/a/18355715/773595

因为每次位置更改都会触发,但我只需要在关闭选项卡/窗口时触发一次。

【问题讨论】:

  • 你能告诉我们一些你试过的代码吗?

标签: javascript angularjs events


【解决方案1】:

您可以在控制器/指令中注册 onbeforeunload,然后您就可以访问范围。如果是服务,我会在 angular.run 生命周期中注册它。

angular.module('app', [])
  .controller('exitController', function($scope, $window) {
    $scope.onExit = function() {
      return ('bye bye');
    };

   $window.onbeforeunload =  $scope.onExit;
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="exitController">
  <a href="http://www.disney.com">Leave page</a>
</div>

【讨论】:

  • 如果您也不必从视图中调用此函数,则无需污染作用域的公共命名空间。请参阅 user4919812 的解决方案。
  • 如何区分浏览器关闭和刷新?
  • @Michael,如果直接点击浏览器选项卡的关闭按钮怎么办??
  • @Michael,谢谢它对于 'window close' 工作得很好,但是当我刷新页面时,同样的函数正在调用,那么还有其他解决方案吗?
【解决方案2】:

我认为您可以使用 $window 在窗口关闭时绑定本机 javascript 事件 例如

app.controller('myCtrl', ['$window', '$myService', function ($window, $myService) {
  $window.onbeforeunload = function (evt) {
    $myService.onclose();
  }
}]);

【讨论】:

  • 哎呀,看起来迈克尔的答案和我的一样
  • 不幸的是,此方法会在某些浏览器(即 Firefox)上触发警报
【解决方案3】:

这个作品?

onbeforeunload,不仅在窗口关闭时触发,在用户刷新窗口(ctrl+f5)时也会触发。如果你使用$window.onunload,函数将永远不会被执行,因为窗口会在执行函数代码之前关闭。

【讨论】:

    猜你喜欢
    • 2012-08-22
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    相关资源
    最近更新 更多