【问题标题】:Apache Cordova backbutton event not fired on Windows Phone (universal)Apache Cordova 后退按钮事件未在 Windows Phone 上触发(通用)
【发布时间】:2015-06-13 10:01:29
【问题描述】:

我为单页应用程序创建了一个 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 通用版上的后退按钮?

【问题讨论】:

  • 你的回调 onBackButton 函数是什么样子的?
  • function onBackButton() { if (Navigtor.page != Consts.StartPage) { // Logic here return true; } return false; }

标签: angularjs cordova windows-phone winjs win-universal-app


【解决方案1】:

这看起来像是 Cordova 的 Windows Phone 运行时目标中的一个错误。在 Silverlight 中,CordovaPage.xaml.cs 文件连接 Windows Phone BackButton 事件处理并将其转发给 Cordova 的 backButton 事件。

这在运行时版本中不会发生,因此您必须通过处理 WinJS 的 onbackclick 事件或 Windows.Phone.UI.Input.HardwareButtons.BackPressed 事件来添加您自己的平台特定处理。

【讨论】:

  • 处理 WinJS.Application.onbackclick 也不起作用,正如我上面提到的
  • 是否有针对自己平台特定处理实现的示例?
  • 不应该 onbackbutton => history.back();和防止默认();工作吗?
【解决方案2】:

这对我有用...

function onBackPressed(eventArgs) {
   eventArgs.handled = true;
   /* Your behaviour/navigation */
}

Windows.Phone.UI.Input.HardwareButtons.addEventListener("backpressed", onBackPressed);

为了防止默认行为(例如暂停应用程序):

eventArgs.handled = true

更多信息:HardwareButtons.BackPressed

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多