Phonegap - navigator.app.backHistory() не работает на HTML кнопку назад

В моем приложении я использую PhoneGap 2.6.Для кнопки назад, я использую следующую функцию

document.addEventListener("backbutton", onBackKeyDown, false);

function onBackKeyDown() {
    alert("hello");
    navigator.app.backHistory();
}

document.addEventListener('deviceready', onDeviceReady, true);

Вышеуказанная функция работает нормально, когда я нажимаю кнопку аппаратного возврата устройства. Но когда я нажимаю кнопку "Назад", она не работает.

Я разработал свою кнопку возврата, как показано ниже:

<a class="ui-link" href="#" rel="external" onclick="onBackKeyDown()">
        <img src="images/icon-back.png" alt="Phone" border="0">
</a>

Но эта кнопка работает нормально для этого navigator.app.exitApp(); (выход из приложения).

//Working Fine
function onBackKeyDown() {
    navigator.app.exitApp();
}

//Not Working
function onBackKeyDown() {
    navigator.app.backHistory();
}

но не работает на navigator.app.backHistory();,

5 ответов

Решение

Я попробовал 3 отдельные вещи, когда я столкнулся с той же ситуацией:

  • window.history.back()

  • navigator.app.backHistory();

  • History.go(-1);

Индивидуально, ни один из них не решает проблему. Я собрал все три вещи вместе, и к моему удивлению, это сработало. Я действительно не знаю, что за этим стоит.

Затем я уменьшил до двух функций и удалил:

  • window.history.back()

Сейчас я использую эту функцию, и она работает нормально.

//Works Fine
function onBackKeyDown() {
    history.go(-1);
    navigator.app.backHistory();
}

Если вы используете атрибут data-rel="back" на якоре, любые щелчки на этом якоре будут имитировать кнопку "Назад", возвращаясь к одной записи в истории и игнорируя href по умолчанию для якоря.

Это зависит от того, где вы находитесь: на моем windowsphone 8.1 lumia 925, он работает history.go (-1);, в то время как navigator.app.backHistory(); вызывает исключение перед сбоем.

На моем Android (я верю большинству), navigator.app.backHistory(); работает правильно.

Это может помочь некоторым людям, так как помогло мне исправить, что history.go(-1) не работает в браузере Google Chrome.

Я совсем не эксперт в jQuery, но подумал, что это может кому-то помочь, так как я искал этот ответ, но сначала не мог его найти.

Решено! Прекратить получать "TypeError: navigator.app не определено"

Функция, которую я создал, которая сначала проверит, на каком устройстве вы находитесь, а затем примените соответствующий скрипт:

function onBackKeyDown() {
    var userAgent = navigator.userAgent || navigator.vendor || window.opera;
    if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i) || userAgent.match(/iPod/i)) {
        // IOS DEVICE
        history.go(-1);
    } else if (userAgent.match(/Android/i)) {
        // ANDROID DEVICE
        navigator.app.backHistory();
    } else {
        // EVERY OTHER DEVICE
        history.go(-1);
    }
}

Вызовите функцию, добавив это к вашей обратной ссылке / кнопке:

onclick="onBackKeyDown()"
Другие вопросы по тегам