Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 截获的后退按钮-Phonegap/Android_Javascript_Android_Html_Cordova - Fatal编程技术网

Javascript 截获的后退按钮-Phonegap/Android

Javascript 截获的后退按钮-Phonegap/Android,javascript,android,html,cordova,Javascript,Android,Html,Cordova,在我的Android phonegap/Cordova 3.5项目中,我有3个html页面(在index.html中有一个按钮调用page2.html,其中有另一个按钮调用page3.html) 在page2.html中,我覆盖了在deviceReady中执行此操作的backbutton: document.addEventListener("backbutton", onBackKeyDown, false); 然后 但是在page3.html中,我想让Android控制backbutton

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

page2.html中,我覆盖了在deviceReady中执行此操作的backbutton:

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

但是在page3.html中,我想让Android控制backbutton,这样我就不会在page3.html中覆盖它。 相反,在page3.html中,backbutton被禁用

问题:

  • 这是预期的行为吗(覆盖一个意味着覆盖另一个 曾经吗
  • 如何摆脱这个?(将backbutton的控制权留给 安卓(我想随时都可以)

  • 您可以在OnBackKeyDown事件中检查页面:

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

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

    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-可以更好地控制页面转换。

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

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

    我发现它是这样的,您在每个文件中都包含了这个函数,对吗?如果您使用的是jqueryMobile,您只需要放置一次(在第一页中),因为jQM使用ajax填充每个页面。但是如果你不想,是的,你必须在任何地方都使用它。这个函数将包含在每个html中,我不想在其中截获backbutton事件,对吗?不,更改你现有的函数。在这个函数中检查你的页面,如果你想返回你调用的history.back(),否则你的退出函数callit只有在函数包含在所有地方时才起作用,在没有包含的页面中backbutton页面只是被禁用了。你可以创建一个javascript文件,将这个函数放在其中,并添加对所有html文件的引用
    document.removeEventListener("backbutton", onBackKeyDown, false);