Подтвердить что ты не робот

PhoneGap - выход Android на подставку

Я пытаюсь программировать RSS-ридер, используя jquery mobile и cordova. Мой RSS-ридер состоит из 3-х страниц (в том же документе HTML: стр. 1, стр. 2, стр. 3). Я пытаюсь переопределить (аппаратное) поведение backbutton, чтобы он выходил из программы. Чтобы проверить, что я не делаю никаких ошибок при настройке проекта, я использовал проект примера PhoneGap и загрузил его в Eclipse. Каждая функция выборки работала, поэтому я переместил мою папку index.html и res в пример с телефонными записями. В моем index.html я импортирую следующие скрипты:

<script src="res/jquery-1.7.1.min.js"></script>
<script src="res/jquery.mobile-1.1.1.min.js"></script>
<script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></script>
<script type="text/javascript" charset="utf-8" src="main.js"></script>

и мой файл main.js выглядит так:

document.addEventListener("backbutton", function(e){
if($.mobile.activePage.is('#homepage')){
    e.preventDefault();
    navigator.app.exitApp();
}
else {
    navigator.app.backHistory()
}
}, false);

Вы можете проверить версию моих скриптов в первом примере кода. Любые идеи о том, как я могу заставить код работать, чтобы он просто выходил из приложения, когда я нажимаю кнопку на моей Xperia Arc? При необходимости я могу загрузить полный код.

РЕДАКТИРОВАТЬ: Я проверил функцию звукового сигнала телефонной связи (cordova) на моем телефоне Android, и он работает, поэтому у этого нет ничего с плохим внедрением script. Это должно быть что-то в файле main.js. Возможно, проблема с совместимостью с функциями функции jquerymobile backgutton и функцией откидной кнопки phonegap.

4b9b3361

Ответ 1

Вам нужно подождать, пока устройство будет готово добавить прослушиватель событий:

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady(){
    document.addEventListener("backbutton", function(e){
       if($.mobile.activePage.is('#homepage')){
           e.preventDefault();
           navigator.app.exitApp();
       }
       else {
           navigator.app.backHistory();
       }
    }, false);
}

Ответ 2

Если вы не хотите использовать какую-либо библиотеку, вы можете использовать window.location.hash для получения "панели" вашего приложения. Пример:

function onDeviceReady(){
    document.addEventListener("backbutton", function(e){
        if(window.location.hash=='#home'){
            e.preventDefault();
            navigator.app.exitApp();
        } else {
            navigator.app.backHistory()
        }
    }, false);
}
document.addEventListener("deviceready", onDeviceReady, false);

Ответ 3

Если вы не хотите использовать Jquery Mobile, замените $.mobile.activePage.is('# homepage') на document.getElementById('# homepage') в ответе @mornaner, как показано в следующем коде:

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady(){
    document.addEventListener("backbutton", function(e){
       if(document.getElementById('#homepage')){
           e.preventDefault();
           navigator.app.exitApp();
       }
       else {
           navigator.app.backHistory()
       }
    }, false);
}

Таким образом, вам не нужно скачивать тарабарщину Jquery Mobile только для этой цели. Кроме того, activePage устарела с JQuery mobile 1.4.0 и будет удалена с 1.5.0. (Вместо этого используйте метод getActivePage() из виджета pagecontainer)

Ответ 4

Чтобы отключить поведение по умолчанию кнопки "Назад" на устройствах Android, просто зарегистрируйте обработчик событий для кнопки "Назад" . Это предотвратит закрытие кнопки "Назад" .

Код, показанный ниже, специально для Framework7

$(document).on('page:beforeinit', function (e) {
if( $.fn.hyellaIMenu.mainView.history && $.fn.hyellaIMenu.mainView.history.length > 1 ){
    document.addEventListener( "backbutton", disableBackButton, false );
}
});

function disableBackButton( e ){
    if( $.fn.hyellaIMenu.mainView.history && $.fn.hyellaIMenu.mainView.history.length < 3 ){
        document.removeEventListener("backbutton", disableBackButton );
    }

if( $.fn.hyellaIMenu.mainView.history && $.fn.hyellaIMenu.mainView.history.length > 1 ){
    $.fn.hyellaIMenu.mainView.router.back();
}
};

Чтобы переопределить поведение кнопки по умолчанию, зарегистрируйте прослушиватель событий для события backbutton.

ПРИМЕЧАНИЕ. Больше не нужно вызывать какой-либо другой метод для переопределения поведения кнопки "назад".

https://cordova.apache.org/docs/en/latest/cordova/events/events.html#backbutton

Ответ 5

function onLoad() {
        document.addEventListener("deviceready", onDeviceReady, false);
    }

    //enter code here enter code heredevice APIs are available
    //enter code here
    function onDeviceReady() {
        // Register the event listener
        document.addEventListener("backbutton", onBackKeyDown, false);
    }

    // Handle the back button
    //
    function onBackKeyDown() {
    }