проблема с хэшем страницы и кнопкой возврата phonegap+Jquery

Я новичок в программировании телефонных звонков и надеюсь, что кто-то может мне помочь здесь:

Кордова 1.7.0, Jquery 1.7.2 и JQM 1.1.0 используются. Приложение тестируется на Android.

Я пытаюсь создать стартовую страницу для приложения.

<body>    
    <div data-role="page" id="page_loading">
        <div data-role="content">
            <h1 >
                <b>welcome</b>
            </h1>
        </div>
    </div>

    <div data-role="page" id="page_1">
    </div>

    <div data-role="page" id="page_2">
    </div>    
</body>

Я поставил $.mobile.changePage($('page_1'), { changeHash: false}); в конце функции onDeviceReady(). Когда приложение запускается, оно сразу показывает страницу загрузки, после завершения загрузки оно переходит на первую страницу.

На первой странице, когда я нажимаю кнопку «Назад» на странице_1, приложение выходит из приложения. Это то, чего я хочу.

Затем я снова использовал mobile.changePage, чтобы перейти на страницу 2. Если я все еще использую changeHash: false, кнопка «Назад» снова выйдет из приложения. Если я использую changeHash: true, кнопка возврата не возвращается на страницу_1, а переходит на страницу загрузки.

Если я использую changeHash: true при переходе от загрузки к странице 1, то кнопка «Назад» на странице 2 откроет первую страницу, но на первой странице она вызовет страницу загрузки, а не выйдет из приложения.

Мой вопрос: как я могу заставить кнопку «Назад» вернуться в историю на странице 2, странице 3 и т. Д., Но выйти из приложения на странице 1?

Я предполагаю, что мне нужно как-то восстановить/очистить хэш. Кто-нибудь может показать мне, как? Благодарность


person Bohr    schedule 17.06.2012    source источник


Ответы (3)


У меня была та же проблема, и я использовал обходной путь:

Макет страницы:

<body>    
    <!-- page_1 before page_loading in source -->
    <div data-role="page" id="page_1">
    </div>
    <!-- page_loading will be shown first -->
    <div data-role="page" id="page_loading">
        <div data-role="content">
            <h1 >
                <b>welcome</b>
            </h1>
        </div>
    </div>
    <div data-role="page" id="page_2">
    </div>    
</body>

jQuery:

function onBodyLoad()
{   
    //go to page_loading before deviceready without keeping it in browser history
    $.mobile.changePage('#page_loading', {reverse: false, changeHash: false});
    document.addEventListener("deviceready", onDeviceReady, false);
}

function onDeviceReady()
{   
    //your initialization code here...

    //now go to page_1 without keeping it in browser history since the actual first page was #page_1 already       
    $.mobile.changePage('#page_1', {reverse: false, changeHash: false});

    //your code here...
}

Это должно соответствовать вашим потребностям, просто попробуйте...

person Baris Akar    schedule 18.06.2012
comment
Работает как шарм! Большое спасибо!! Здесь я придумал другой способ: я переопределяю функцию кнопки «Назад» для выхода из приложения при входе на страницу, затем удаляю EventListener при выходе со страницы. Таким образом, я могу выйти из приложения на некоторых других страницах, которые не должны позволять пользователю вернуться: $("#page_login").live('pagebeforeshow',function(){document.addEventListener("backbutton", backButtonExit,false);}) $("#page_login").live('pagehide',function(){document.removeEventListener("backbutton", backButtonExit,false);}) function backButtonExit(){navigator.app.exitApp();} - person Bohr; 21.06.2012

У меня возникли проблемы при обновлении с jquery-1.7.1 до jquery-1.7.2, поэтому я быстро переключился обратно. На сайте JQM указано, что в настоящее время он поддерживает jQuery 1.6.4 и 1.7.1. Не могли бы вы попробовать перейти на версию 1.7.1 и посмотреть, работает ли она?

(Используя Cordova 1.8.0 и JQM-bleeding edge)

person ivy    schedule 18.06.2012
comment
Спасибо! Вроде проблема не в 1.7.2. Я предполагаю, что проблема в том, как я структурирую страницу и записываю хеш. - person Bohr; 21.06.2012

Я знаю, что это действительно старый вопрос, но я только что столкнулся с этой проблемой и подумал, что добавлю свое решение:

Я только что добавил прослушиватель «onPageBeforeShow» на свою страницу-заставку и использовал глобальное логическое значение «splashDisplayed», чтобы определить, был ли показан экран-заставка в первый раз. Если да, установите для логического значения значение true, если нет, выйдите из приложения.

$(document).on("pagebeforeshow", "#splash", function () {
if(!splashDisplayed){
    splashDisplayed=true;
}else{
    navigator.app.exitApp();
}
});
person justry    schedule 10.09.2016