覆盖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ö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.js
的document.addEventListener
的else
块中,在507行之后
if (e === 'backbutton') { var exec = require('cordova/exec') exec(null, null, "App", "overrideBackbutton", [true]); }
把下面的代码放在cordova-1.5.0.js
中cordova
定义的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.js
中cordova
定义的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(); }