覆盖Android Backbutton行为仅适用于PhoneGap的第一页

我正在使用PhoneGap 1.5.0,jQuery 1.7.1和jQuery mobile 1.0.1,并试图覆盖Android中的后台button,如这里或这里所述 。

document.addEventListener("deviceready", onDeviceReady, false); // PhoneGap loaded function onDeviceReady() { console.log("PhoneGap Ready!"); // waiting for button document.addEventListener("backbutton", handleBackButton, false); } // handle the back button function handleBackButton() { console.log("Back Button Pressed!"); navigator.app.exitApp(); } 

但它只适用于我的应用程序的第一页。 换到不同的页面后,button什么也不做。 该应用程序包含一个像这样的tabview:

 <body> <div data-role="page" id="pilotTab"> <div data-role="header"> <h1>Pilot</h1> </div> <div data-role="content" id="pilotContent"> content be here ;) </div> <div data-role="footer" data-position="fixed"> <div data-role="navbar"> <ul> <li><a href="pilotTab.html" data-transition="none">Lotse</a> </li> <li><a href="bookingTab.html" data-transition="none">Verkehr</a> </li> <li><a href="mainListTab.html" data-transition="none">B&ouml;rt</a> </li> </ul> </div> <!-- /navbar --> </div> <!-- /footer --> </div> 

这是一个愚蠢的错误还是有什么特别的,我不得不考虑使其正常工作? 提前致谢。

我经历了新的Phonegap源代码,并进行了以下更改以使后端工作。

Htmltesting代码

 <script type="text/javascript"> $("#home").click(function(){ $.mobile.changePage("home.html"); }); document.addEventListener("deviceready", onDeviceReady, false); document.addEventListener("backbutton", handleBackButton, false); function onDeviceReady() { console.log("PhoneGap Ready!"); } function handleBackButton() { console.log("Back Button Pressed!"); navigator.app.exitApp(); } </script> 

将下面的代码放在cordova-1.5.0.jsdocument.addEventListenerelse块中,在507行之后

 if (e === 'backbutton') { var exec = require('cordova/exec') exec(null, null, "App", "overrideBackbutton", [true]); } 

把下面的代码放在cordova-1.5.0.jscordova定义的fireDocumentEvent方法后面592行

 if(type == "backbutton"){ var e = document.createEvent('Events'); e.initEvent(type); if (data) { for (var i in data) { e[i] = data[i]; } } document.dispatchEvent(e); return; } 

我已经把这整个cordova1.5.0.js在这个要点更新代码https://gist.github.com/2020325

虽然它为我工作,但它仍然可能需要一些改变,在所有可能的情况下工作。

编辑

把下面的代码放在cordova-1.5.0.jscordova定义的fireDocumentEvent方法后面592行

 if(type == "backbutton" || type == "menubutton" || type == "searchbutton"){ var e = document.createEvent('Events'); e.initEvent(type); if (data) { for (var i in data) { e[i] = data[i]; } } document.dispatchEvent(e); return; } 

布莱斯·柯蒂斯(Bryce Curtis)在该页面上build议只更改一行:

channel.onNativeReady.subscribe(_self.boot);

至 :

channel.onNativeReady.subscribeOnce(_self.boot);

在文件的末尾。

这似乎是对我的伎俩,并固定后扣,menubutton和searchbutton!

@dhaval:我已经在Android的cordova-1.5.0.js中做了以下更改。

我没有处理的页面button工作正常,但我正在处理后退button的地方不起作用。

它甚至不能selectfunction

 function handleBackButton() { console.log("Back Button Pressed!"); navigator.app.exitApp(); }