Страница хэш и кнопка Backbutton выпускают телефонный разрыв +Jquery

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

используются cordova 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?

Я думаю, мне нужно как-то перестроить / очистить хеш. Может кто-нибудь показать мне, как? Спасибо

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

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

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

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

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

У меня возникли проблемы при обновлении с 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)

Другие вопросы по тегам