Переопределить поведение Android Backbutton работает только на первой странице с PhoneGap - PullRequest
18 голосов
/ 09 марта 2012

Я использую PhoneGap 1.5.0, jQuery 1.7.1 и jQuery mobile 1.0.1 и пытаюсь переопределить кнопку в 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();
}

Но это работает только на первой странице моего приложения. После перехода на другую страницу кнопка вообще ничего не делает. Приложение состоит из вкладки, как это:

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

12 голосов
/ 12 марта 2012

Я просмотрел новый исходный код 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>

Поместите следующий код в блок elsedocument.addEventListener в cordova-1.5.0.js после строки-номера 507

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

Введите следующий код в fireDocumentEvent метод определения cordova в cordova-1.5.0.js после строки-номера 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;
}

Я поместил весь кордовый-1.5.0.js в этот список с обновленным кодом https://gist.github.com/2020325

Хотя он работает для меня, но все же могут потребоваться некоторые изменения для работы во всех возможных сценариях.

Редактировать

Поместить следующий код в fireDocumentEvent метод определения cordova в cordova-1.5.0.js после строки № 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;
    }
8 голосов
/ 16 марта 2012

Брайс Кертис предлагает на этой странице просто изменить строку:

channel.onNativeReady.subscribe(_self.boot);

до:

channel.onNativeReady.subscribeOnce(_self.boot);

в конце файла.

Это, кажется, делает трюк для меня и исправил кнопку, а также кнопку и кнопку поиска!

0 голосов
/ 04 сентября 2012

@ dhaval: я сделал следующие изменения в cordova-1.5.0.js в Android.

Страницы, где я не обработал кнопку возврата, работают нормально, но место, где я работаюкнопка Назад не работает.

Она даже не может выбрать функцию

function handleBackButton() {

  console.log("Back Button Pressed!");
    navigator.app.exitApp();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...