【问题标题】:Back Button intercepted for ever - Phonegap/Android后退按钮永远被拦截 - Phonegap/Android
【发布时间】:2014-06-26 11:51:06
【问题描述】:

在我的 Android phonegap/Cordova 3.5 项目中,我有 3 个 html 页面(index.html 中的一个按钮调用 page2.html,而另一个按钮调用 >page3.html)。

page2.html 中,我在 deviceReady 中覆盖后退按钮:

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

然后

function onBackKeyDown() {
            console.log("onBackKeyDown");
            navigator.app.exitApp();
        }

但在 page3.html 我想让 Android 控制后退按钮,所以我不会在 page3.html 中覆盖它。 而是在 page3.html 中禁用了后退按钮。

问题:

  1. 这是预期的行为吗(覆盖一个意味着覆盖 曾经)?
  2. 如何摆脱这种情况? (将后退按钮的控制权留给 Android 随时随地)

【问题讨论】:

    标签: javascript android html cordova


    【解决方案1】:

    可以在 OnBackKeyDown 事件中查看页面:

    function onBackKeyDown() {
      var pagename = // get the page name here
      if ( pagename == page3.html ) {
        history.back();
      }
      else {
        navigator.app.exitApp();
      }
    }
    

    【讨论】:

    • 这个函数是要包含在每个html中,我不想拦截后退按钮事件的地方,对吧?
    • 不,改变你现有的功能。在这个函数中检查你想要返回的页面,你调用 history.back() 否则你的退出函数调用
    • 只有在任何地方都包含该功能时才有效,在不包含该功能的页面中,后退按钮页面只是被禁用。
    • 您可以创建一个javascript文件并将此函数放入其中并添加对所有html文件的引用
    【解决方案2】:

    您可以根据每个页面返回按钮行为。示例如下所示。

    function onBackKeyDown(e) {
            if ($.mobile.activePage[0].id == "home"
                || $.mobile.activePage[0].id == "login") {
                e.preventDefault();
                navigator.app.exitApp();
            }else if($.mobile.activePage[0].id == "inspection"){
                e.preventDefault();
                back();
                //return false;
            }else if($.mobile.activePage[0].id == "noDetails"){
                e.preventDefault();
                $.mobile.changePage("home.html");
                return false;
            }else{
                navigator.app.backHistory();
            }
    
        }
    

    我正在使用 jQuery Mobile - 可以更好地控制页面转换。

    【讨论】:

    • 这样,你在每个文件中都包含这个函数,对吧?
    • 如果您使用 jqueryMobile,您只需放置一次。(在第一页中。)因为 jQM 使用 ajax 填充每个页面。但如果你不这样做,是的,你必须在任何地方使用它。
    【解决方案3】:

    这个问题的真正解决方案可能是使用这个 API 删除事件:

    document.removeEventListener("backbutton", onBackKeyDown, false);
    

    我找到了here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      相关资源
      最近更新 更多