首页 文章

Apache Cordova后退按钮事件未在Windows Phone上触发(通用)

提问于
浏览
2

我已经为一个单页应用程序爬了一个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上的后退按钮呢?

3 回答

  • 2

    这看起来像Cordova的Windows Phone Runtime目标中的一个错误 . 在Silverlight中,CordovaPage.xaml.cs文件挂接Windows Phone BackButton事件处理并将其转发到Cordova的backButton事件 .

    这不需要通过处理WinJS的onbackclick事件或Windows.Phone.UI.Input.HardwareButtons.BackPressed事件来添加您自己的平台特定处理 .

  • 2

    这对我有用......

    function onBackPressed(eventArgs) {
       eventArgs.handled = true;
       /* Your behaviour/navigation */
    }
    
    Windows.Phone.UI.Input.HardwareButtons.addEventListener("backpressed", onBackPressed);
    

    要防止默认行为(例如暂停应用):

    eventArgs.handled = true

    更多信息:HardwareButtons.BackPressed

  • 1

    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;
    };
    

相关问题