【问题标题】:Over-ride the back button of android device through phonegap in javascript通过javascript中的phonegap覆盖android设备的后退按钮
【发布时间】:2014-05-01 19:26:44
【问题描述】:

我正在用 HTML5 和 javascript 制作应用程序并部署在 android 设备上。在应用程序中确认后,我不希望它返回上一页。但是,在设备的后退按钮上,它会转到上一页。

我尝试了很多演示。以下是我尝试过的链接之一。 http://docs.phonegap.com/en/2.8.0/cordova_events_events.md.html#backbutton

我尝试显示警报以用于演示目的。但它不起作用。

请帮助您提出建议。谢谢。

我尝试了以下方法。它不起作用。我需要添加任何外部 jquery 文件吗?

<script type="text/javascript" charset="utf-8">
    function onLoad() {
        document.addEventListener("deviceready", onDeviceReady, false);
        alert("On Load");
    }

     function onDeviceReady() {
        document.addEventListener("backbutton", onBackKeyDown, false);
        alert("Device Ready");
    }

    //document.addEventListener('backbutton', onBackKeyDown, false);

    function onBackKeyDown(event) {
        event.preventDefault();
        alert("back pressed");
    }
    </script>

【问题讨论】:

  • 你是否将 event.preventDefault() 放在按下后退按钮时调用的方法中?
  • 不,我没有。我现在正在尝试。如果还是不行,我会贴出我试过的demo代码。
  • 请在我的问题中找到编辑。它显示“加载中”警报框,但不显示其他两个警报。

标签: javascript android html cordova


【解决方案1】:

防止后退按钮默认行为的正确方法是添加防止默认方法:

document.addEventListener('backbutton', onBackKeyDown, false);

function onBackKeyDown(event) {
    // Handle the back button
    event.preventDefault();
    alert('I am a demo purpose alert thingy');
}

【讨论】:

  • 是否包含所有的cordova/phonegap 脚本?
  • 如果您尝试将 deviceready 事件注册放在 onLoad 方法之外怎么办?
  • 我做到了,还包括了cordova-2.2.0.js。但是没有效果。
  • 您在哪个设备上试用过?
  • 所以基本上注册您的 deviceready 事件有问题,因为我提供的代码必须有效。您是否尝试将其放在 onLoad 函数之外?也可能尝试更新cordova,也许2.2有一个奇怪的错误或什么......
【解决方案2】:

看看你传递的第三个参数。它指示侦听器是使用捕获还是冒泡。您可以找到更多信息here

您想在开头(捕获)而不是结尾(气泡)捕获后退按钮事件。

那就试试这个

document.addEventListener("backbutton", onBackKeyDown, true);

而不是

document.addEventListener('backbutton', onBackKeyDown, false);

【讨论】:

  • 我试过你的建议,很遗憾没有奏效。
  • 您的手机运行的是哪个安卓版本?编辑:还尝试在事件注册之前和事件方法中放置警报/控制台,以查看该代码是否通过。
  • 好的,很抱歉,您已经收到了警报。我还强烈推荐使用 chrome 进行远程调试(需要 android 4.0 或更高版本),请参见此处:developers.google.com/chrome-developer-tools/docs/…
【解决方案3】:

这是我在 if else 中使用设备后退按钮的示例

//device back button functions
document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {
    document.addEventListener("backbutton", onBackKeyDown, false);
}

function onBackKeyDown() {
    if($state.current.name == 'home'){
        // e.preventDefault();
        navigator.app.exitApp();
    } else {
       $state.go('home');
      e.preventDefault();

    }
}

【讨论】:

  • 如果他想回到一个州而不是总是“家”怎么办?