窗口在重新加载之前确认消息

时间:2016-06-09 13:49:59

标签: javascript angularjs

我的代码工作正常,但我只是想知道这是否正常..我在Linux中尝试了我的代码,在退出页面或重新加载之前我的确认消息可以更改。然而,当我在Mac上尝试它时,我看到的唯一消息是"您所做的更改可能无法保存"。是因为代码还是因为操作系统,消息的行为就像那样。它出现在Firefox的Chrome浏览器中

代码是:

<!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>

PS

上面的代码是AngularJS,但即使是使用纯javascript的相同功能也有相同的行为。

1 个答案:

答案 0 :(得分:3)

代码很好。

The reference表示

  

在Firefox 4及更高版本中,返回的字符串不会显示给用户。相反,Firefox显示字符串“此页面要求您确认要离开 - 您输入的数据可能无法保存。”

它还声明Chrome 51.0和Firefox 44.0中已删除“自定义文字支持”。