当我在主页上使用我的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未被暂停。
也许是因为我在一个有角度的应用程序中?
有人有想法吗?
答案 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);