Cordova后退活动无效

时间:2015-08-19 10:20:09

标签: javascript android cordova events

我目前正在使用Apache Cordova版本5.1.1为iOS和Android构建本机应用程序。除了Android内的backbutton事件外,一切似乎都运行良好。

我想使用后退按钮浏览应用程序的屏幕(应用程序是使用Framework7构建的),但由于某种原因,backbutton事件永远不会触发。以下是我正在使用的(简化)代码的评论:

if( window.cordova )
{
    document.addEventListener("deviceready", function() { MRC.init(); }, false);
}

var MRC = 
{
    init: function()
    {
        if( window.cordova )
        {
            cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
            cordova.plugins.Keyboard.disableScroll(true);

            // Prevent the back button:
            document.addEventListener("backbutton", function(e) {

                e.preventDefault();
                MRC.view.router.back();

                return false;

            }, false);
        }
    }f
}

init()函数内部的所有内容都可以正常工作,但backbutton事件侦听器永远不会触发,当用户按下Android设备上的硬件后退按钮时,应用会关闭,而不是转到以前的观点。

根据Cordova的文件:

  

这是当用户按下后退按钮时触发的事件。

document.addEventListener("backbutton", yourCallbackFunction, false);
     

详情

     

如果您需要覆盖默认的后退按钮行为,则可以   为'backbutton'事件注册一个事件监听器。它不再是   必须调用任何其他方法来超越后退按钮   行为。现在,您只需要注册一个事件监听器   '返回按钮'。

     

通常,您需要附加一个事件监听器   一旦收到Cordova'deviceready',document.addEventListener   事件

     

支持的平台

     
      
  • 的Android
  •   
  • BlackBerry WebWorks(OS 5.0及更高版本)
  •   
  • Windows Phone 7和8
  •   

有没有人在这里遇到过类似的问题,或者是否有我错过的解决方法?

2 个答案:

答案 0 :(得分:6)

现在,我不知道它在Windows Phone和Webworks上的效果如何,但另一种捕获后退按钮的简单方法是正确使用HTML5 history.pushState API。简单来说,这意味着如果您在浏览器中加载您的应用程序,通过应用程序的每次导航都会更改URL,如果正确实施,这甚至意味着“从内存中恢复”等内容。将完美地工作(对于phonegap应用程序通常不是这种情况),因此比绑定backbutton事件更好。似乎framework7使用pushState: true init上的Framework7()选项支持此功能。说实话,我有点担心他们说的描述

  

如果您开发网络应用程序(不是PhoneGap或主屏幕Web应用程序),启用

非常有用

这直接违背了我自己的经验,让我担心Framework7实现有一些粗略的边缘,但也许这只是IE上的问题或其他什么? (我构建的历史支持的PhoneGap应用程序的唯一正确实现是针对Android并运行在Chrome之上(我认为最新的PhoneGap应用程序的默认设置))

答案 1 :(得分:0)

//var APP_PLUGIN_NAME = Number(cordova.platformVersion.split('.')[0]) >= 4 ? 'CoreAndroid' : 'App';
var APP_PLUGIN_NAME ='App'

请在代码cordova.js上方尝试此操作。您的问题将解决。即使我将cordova版本从3.6.6升级到5.1.1,我也遇到了同样的问题