首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >覆盖Android Backbutton行为仅适用于使用PhoneGap的第一个页面

覆盖Android Backbutton行为仅适用于使用PhoneGap的第一个页面
EN

Stack Overflow用户
提问于 2012-03-09 17:47:21
回答 3查看 22.9K关注 0票数 19

我正在使用PhoneGap 1.5.0,jQuery 1.7.1和jQuery Mobile1.0.1,并试图覆盖herehere中的后退按钮。

代码语言:javascript
复制
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();
}

但它只在我的应用程序的第一页起作用。切换到不同的页面后,“后退”按钮什么也不做。该应用程序由如下所示的选项卡视图组成:

代码语言:javascript
复制
<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>

这是一个愚蠢的错误,还是我必须考虑一些特殊的东西才能让它正常工作?提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-12 14:44:26

我浏览了新的Phonegap源代码,并做了以下更改以使work按钮工作。

Html测试代码

代码语言:javascript
复制
<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行之后

代码语言:javascript
复制
if (e === 'backbutton') {
    var exec = require('cordova/exec')
    exec(null, null, "App", "overrideBackbutton", [true]);
}

将以下代码放在cordova-1.5.0.jscordova定义的fireDocumentEvent方法中的第592行之后

代码语言:javascript
复制
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;
}

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

虽然它对我来说是有效的,但它可能仍然需要一些更改才能在所有可能的情况下工作。

编辑

将以下代码放在cordova-1.5.0.jscordova定义的fireDocumentEvent方法中的第592行之后

代码语言:javascript
复制
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;
    }
票数 12
EN

Stack Overflow用户

发布于 2012-03-16 23:23:15

布莱斯·柯蒂斯在that page上建议改变这句话:

channel.onNativeReady.subscribe(_self.boot);

至:

channel.onNativeReady.subscribeOnce(_self.boot);

在文件的末尾。

这似乎为我做了这个把戏,修复了后退按钮、菜单按钮和搜索按钮!

票数 8
EN

Stack Overflow用户

发布于 2012-09-04 19:37:06

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

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

它甚至不能选择函数

代码语言:javascript
复制
function handleBackButton() {

  console.log("Back Button Pressed!");
    navigator.app.exitApp();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9631933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档