Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript或angularjs在刷新之间延迟浏览器关闭或选项卡关闭_Javascript_Angularjs_Browser_Event Handling_Dom Events - Fatal编程技术网

Javascript或angularjs在刷新之间延迟浏览器关闭或选项卡关闭

Javascript或angularjs在刷新之间延迟浏览器关闭或选项卡关闭,javascript,angularjs,browser,event-handling,dom-events,Javascript,Angularjs,Browser,Event Handling,Dom Events,如果用户刷新页面或关闭浏览器/浏览器选项卡,是否有方法触发?(我想在AngularJS/JavaScript中触发它)。有什么想法吗 现在,我只知道当前页面何时以以下代码关闭: var myEvent = window.attachEvent || window.addEventListener; var chkevent = window.attachEvent ? 'onbeforeunload' : 'beforeunload'; /// make IE7, IE8 compatab

如果用户刷新页面或关闭浏览器/浏览器选项卡,是否有方法触发?(我想在AngularJS/JavaScript中触发它)。有什么想法吗

现在,我只知道当前页面何时以以下代码关闭:

var myEvent = window.attachEvent || window.addEventListener;
   var chkevent = window.attachEvent ? 'onbeforeunload' : 'beforeunload'; /// make IE7, IE8 compatable

   myEvent(chkevent, function (e) { // For >=IE7, Chrome, Firefox
       var confirmationMessage = ' ';  // a space
       (e || window.event).returnValue = "Are you sure that you'd like to close the browser?";
       return confirmationMessage;
   });

您的指令可能如下所示:

myApp.directive('myDirective', function() {
    return function($window) {
        var myEvent = $window.attachEvent || $window.addEventListener,
            chkevent = $window.attachEvent ? 'onbeforeunload' : 'beforeunload'; 

        myEvent(chkevent, function(e) {
            var confirmationMessage = ' ';
            (e || $window.event).returnValue = "Are you sure that you'd like to close the browser?";
            return confirmationMessage;
        });
    }
});

link
函数中的Bind事件,该函数将提供对角度编译指令元素的访问

指令

.directive('windowExit', function($window) {
  return {
    restrict: 'AE',
    link: function(element, attrs){
       var myEvent = $window.attachEvent || $window.addEventListener,
       chkevent = $window.attachEvent ? 'onbeforeunload' : 'beforeunload'; /// make IE7, IE8 compatable

       myEvent(chkevent, function (e) { // For >=IE7, Chrome, Firefox
           var confirmationMessage = ' ';  // a space
           (e || $window.event).returnValue = "Are you sure that you'd like to close the browser?";
           return confirmationMessage;
       });
    }
  };
});
HTML

<body window-exit></body>

我最终采用了以下方法:

'use strict';
angular.module('myApp')
.controller('MyCtrl', ['$rootScope', '$scope', '$location', '$state', '$window', '$timeout', '$sce', 'UserAuthorize', function($rootScope, $scope, $location, $state, $window, $timeout, $sce, UserAuthorize) {

//Getting the value from storage
$window.sessionStorage.getItem('key');

//Setting the value to storage
$window.sessionStorage.setItem('key', 'value');

// Remove from storage
$window.sessionStorage.removeItem('key');

}]);
基于此,我在用户登录时保存了我的值。然后,当浏览器窗口关闭时,这些值将不会保留

通过使用本地存储,我能够仅为当前窗口持久化会话

编辑:
我认为通过使用cookie方法,我可以处理这个问题,但随后我开始区分刷新和关闭。结果是localStorage救了我一命:)

写一条指令。。将此代码放入指令中..注入
$window
依赖性并使用它而不是
window
@pankajparkar:谢谢!有没有机会给我举个小例子?可以帮我学得更快:)根据你的回答,我认为应该是:
限制:“A”
,对吗?@el.severo添加了
A
。。谢谢。它只适用于触发关闭。但我想在它关闭和刷新页面时有所不同。刷新的意思是..url哈希更改还是其他?在这个意义上,它将通过从浏览器中按刷新按钮或仅使用键盘快捷键进行刷新