我已经为一个单页应用程序爬了一个Apache Cordova项目。在开始页面上有一个项目列表。当我点击某个项目时,我会导航到详细信息页面
window.navigate("#/details/" + id);
Angular.js显示详细信息模板,但是当我在Windows手机上使用硬件后退按钮时,它会暂停应用程序而不是导航回来。所以我试图连接到后退按钮事件
function onDeviceReady() {
// Handle the Cordova pause and resume events
document.addEventListener('pause', onPause.bind(this), false);
document.addEventListener('resume', onResume.bind(this), false);
document.addEventListener("backbutton", onBackButton, false);
}
但是当我点击后退按钮时,甚至没有触发此事件。我也使用WinJS并尝试了WinJS.Application.onbackclick,但即使这样也行不通。
那么如何处理Windows Phone上的后退按钮呢?
这看起来像Cordova的Windows Phone Runtime目标中的一个错误。在Silverlight中,CordovaPage.xaml.cs文件挂接Windows Phone BackButton事件处理并将其转发到Cordova的backButton事件。
这在Runtime版本中不会发生,因此您必须通过处理WinJS的onbackclick事件或Windows.Phone.UI.Input.HardwareButtons.BackPressed事件来添加您自己的平台特定处理。
这对我有用......
function onBackPressed(eventArgs) {
eventArgs.handled = true;
/* Your behaviour/navigation */
}
Windows.Phone.UI.Input.HardwareButtons.addEventListener("backpressed", onBackPressed);
要防止默认行为(例如暂停应用):
eventArgs.handled = true
Windows Phone WinJS onbackclick需要返回true或false,具体取决于您是否要退出应用程序(当您一直导航并最终想要退出时)。
//for not Windows Phone users
document.addEventListener("backbutton", function () { goBack(); }, false);
//for Windows Phone users
if (Windows && WinJS){
WinJS.Application.onbackclick = function (event) {
event.handled = true;
return goBack();
};
}
goBack函数在执行时返回true,在无法再返回时返回false。
var backstack = 0;
function goForward(){
backstack++;
//additional navigation code
};
function goBack(){
//show hide back arrow
if (Windows && WinJS) {
var currentview = Windows.UI.Core.SystemNavigationManager.getForCurrentView();
currentview.appViewBackButtonVisibility = backstack < 1;
}
if(backstack > 1) {
backstack--;
//additional back navigation code
return true;
}
else return false;
};