-
-
Save 981746/3b6050052ffafef0b4df to your computer and use it in GitHub Desktop.
<!DOCTYPE html> | |
<html data-ng-app="TestApp"> | |
<head> | |
<script src="http://code.angularjs.org/1.2.9/angular.js"></script> | |
<script> | |
angular.module('TestApp', []) | |
.factory('beforeUnload', function ($rootScope, $window) { | |
// Events are broadcast outside the Scope Lifecycle | |
$window.onbeforeunload = function (e) { | |
var confirmation = {}; | |
var event = $rootScope.$broadcast('onBeforeUnload', confirmation); | |
if (event.defaultPrevented) { | |
return confirmation.message; | |
} | |
}; | |
$window.onunload = function () { | |
$rootScope.$broadcast('onUnload'); | |
}; | |
return {}; | |
}) | |
.run(function (beforeUnload) { | |
// Must invoke the service at least once | |
}); | |
function TestController($scope) { | |
$scope.$on('onBeforeUnload', function (e, confirmation) { | |
confirmation.message = "All data willl be lost."; | |
e.preventDefault(); | |
}); | |
$scope.$on('onUnload', function (e) { | |
console.log('leaving page'); // Use 'Preserve Log' option in Console | |
}); | |
} | |
</script> | |
</head> | |
<body data-ng-controller="TestController"> | |
This is a test | |
<a href="http://www.google.com/">Google</a> | |
</body> | |
</html> |
Not working with angular https://code.angularjs.org/1.4.14/angular.js
Thanks for this solution, solves my problem. I use angular 1.6.3 and it work perfectly.
@anil826, Some browsers have removed custom messages.
Thanks - this works perfectly
👍
Hi,
It worked perfectly except in one scenario. If I run the code and without doing any interaction with the window I click on the close button, the dialog box does not appear. I have to do some interaction in the window (like clicking the blank area) for the dialog to appear the next time I want to close the window.
Any thoughts on how to solve this issue?
@MijaelWatts Maybe try to get the focus on a page element (via the .focus() method) when you load your page or emulate a click on an hidden field ?
Excelent! thanks 🍻
Can I rely on this for API call?
Above code is not working for latest version of chrome I need to put custom message in prompt but I showing default message