首页 文章

Cordova backbutton事件无法正常工作

提问于
浏览
3

我目前正在使用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 回答

  • 6

    现在,我不知道它在Windows Phone和Webworks上的效果如何,但另一种捕获后退按钮的简单方法是正确使用HTML5 history.pushState API . 简单来说,这意味着如果您在浏览器中加载您的应用程序,URL正在通过应用程序的每个导航进行更改,如果正确实现,这甚至意味着像'resume from memory'这样的东西将完美运行(对于phonegap应用程序通常不是这种情况)因此比绑定 backbutton 事件更好 . 似乎 framework7 使用 Framework7() init上的 pushState: true 选项支持此功能 . 说实话,我有点担心他们说的描述

    如果您开发Web应用程序(不是PhoneGap或Home Screen Web应用程序),则启用它很有用

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

  • 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,我也遇到了同样的问题

相关问题