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

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

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();.

Ответы

Ответ 1

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

  • window.history.back()

  • navigator.app.backHistory();

  • History.go(-1);

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

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

  • window.history.back()

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

Решено! Остановить получение "TypeError: navigator.app undefined"

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

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()"