退出cordova Windows 10应用程序

时间:2016-11-24 11:10:08

标签: angularjs windows cordova uwp windows-10-universal

当我在主页上使用我的cordova应用程序时,我需要向用户显示消息,询问他是否真的要退出应用程序。
如果用户选择"是"。

,我需要退出应用程序

为此,我使用此代码:

document.addEventListener('backbutton', function() {
    $rootScope.back();
    $rootScope.$apply();
}, false);

$rootScope.back = function(execute) {
    var path = $location.$$path;
    if (path !== '/') {
        $location.path(path.split('/').slice(0, -1).join('/'));
    } else {
        $rootScope.exitApp();
    }
}.bind(this);

$rootScope.exitApp = function() {
    $rootScope.$emit('showPopover', {
        message: $rootScope.LABELS.QUIT_APP,
        confirmCallback: function() {
            if (typeof navigator.app !== 'undefined') {
                navigator.app.exitApp();
            }
        },
        cancelCallback: doNothing
    });
};

它在Android和iOS中工作,但在Windows 10应用程序中没有。

在W10中,navigator.app未定义 我读到我应该暂停app而不退出它,所以我尝试在cordova doc(https://cordova.apache.org/docs/en/latest/cordova/events/events.html#backbutton)中编写这个窗口怪癖:

$rootScope.exitApp = function() {
    $rootScope.$emit('showPopover', {
        message: $rootScope.LABELS.QUIT_APP,
        confirmCallback: function() {
            if (typeof navigator.app !== 'undefined') {
                navigator.app.exitApp();
            }
            else if (platformUtils.isWindows()) {
                throw new Error('Exit'); // This will suspend the app
            }
        },
        cancelCallback: doNothing
    });
};

throw new Error('Exit')被调用并在日志中显示错误,但app未被暂停。

也许是因为我在一个有角度的应用程序中?

有人有想法吗?

2 个答案:

答案 0 :(得分:1)

你也可以使用它:

if (device.platform.toLowerCase() === "windows") {
    //this closes the app and leaves a message in the windows system eventlog if error object is provided
    MSApp.terminateApp();
} else {
    navigator.app.exitApp()
}

答案 1 :(得分:0)

问题是由于$emit用于显示弹出窗口 如果我在popover回调上抛出错误,则此错误不会返回到backbutton事件回调。

但是,在Windows平台上,我们不应该显示popover来询问用户是否确定要离开应用程序,因此如果我将其添加到“后退”功能,它就可以了。

用于Windows 10应用的最终代码是:

document.addEventListener('backbutton', function() {
    $rootScope.back();
    $rootScope.$apply();
}, false);

$rootScope.back = function(execute) {
    var path = $location.$$path;
    if (path !== '/') {
        $location.path(path.split('/').slice(0, -1).join('/'));
    } else {
        if (window.device.platform.toLowerCase() === 'windows') {
            throw new Error('Exit'); // This will suspend the app
        } else {
            $rootScope.exitApp();
        }
    }
}.bind(this);