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

时间:2012-03-09 09:47:21

标签: android cordova override back-button

我正在使用PhoneGap 1.5.0,jQuery 1.7.1和jQuery mobile 1.0.1,并尝试按照herehere覆盖Android中的后退按钮。

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();
}

但它只适用于我的应用的第一页。更改为不同的页面后,后退按钮什么都不做。该应用程序包含这样的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>

这是一个愚蠢的错误,还是有什么特别的东西我必须考虑让它正常工作?提前谢谢。

3 个答案:

答案 0 :(得分:12)

我浏览了新的Phonegap源代码并进行了以下更改以使后退按钮正常工作。

Html测试代码

<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>

将以下代码放在else的{​​{1}}块中document.addEventListener后面的第507行

cordova-1.5.0.js

在第592行之后的if (e === 'backbutton') { var exec = require('cordova/exec') exec(null, null, "App", "overrideBackbutton", [true]); } fireDocumentEvent定义的cordova方法中放入以下代码

cordova-1.5.0.js

我已将整个cordova-1.5.0.js放在这个要点中,并附有更新的代码https://gist.github.com/2020325

虽然它对我有用,但在所有可能的情况下仍然可能需要进行一些更改。

修改

在第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; } fireDocumentEvent定义的cordova方法中放入以下代码

cordova-1.5.0.js

答案 1 :(得分:8)

布莱斯柯蒂斯建议that page改变界限:

channel.onNativeReady.subscribe(_self.boot);

到:

channel.onNativeReady.subscribeOnce(_self.boot);

在文件的末尾。

这似乎对我有用,并修复了后退按钮和menubutton和搜索按钮!

答案 2 :(得分:0)

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

我没有处理回按钮的页面工作正常,但是我处理Back按钮的地方不起作用。

它甚至无法选择功能

function handleBackButton() {

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