Phonegap - navigator.app.backHistory() not working on HTML back button
Asked Answered
S

5

17

In my app i am using phonegap 2.6.For back button, I am using the following function

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

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

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

The above function works fine when I click on the device's hardware back button. But when I click on the back button it is not working.

I have designed my back button as below:

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

But this button is working fine for this navigator.app.exitApp(); (application exit).

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

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

but not working for navigator.app.backHistory();.

Sonyasoo answered 14/5, 2013 at 11:34 Comment(1)
For someone who came here looking for the same problem with cordova 3.8 and ios 9.0 check this: #32761706Susiesuslik
C
14

I have tried 3 separate things when I faced the same situation:

  • window.history.back()

  • navigator.app.backHistory();

  • History.go(-1);

Individually, none of these solve the problem. I put all 3 things together and much to my surprise it worked. I really don't know what is behind it.

Then I decreased to two functions and removed:

  • window.history.back()

Now I am using this function and it is working fine.

//Works Fine
function onBackKeyDown() {
    history.go(-1);
    navigator.app.backHistory();
}
Cholula answered 16/5, 2013 at 14:14 Comment(0)
C
1

If you use the attribute data-rel="back" on an anchor, any clicks on that anchor will mimic the back button, going back one history entry and ignoring the anchor's default href.

Clint answered 14/5, 2013 at 12:47 Comment(1)
Pretty sure data-rel="back" is only being used in jQuery Mobile.Gliadin
I
1

it depends where you are: on my windowsphone 8.1 lumia 925, it works history.go(-1);, while navigator.app.backHistory(); causes an exception before crashing.

On my Android (I believe the majority), navigator.app.backHistory(); works properly.

Infuscate answered 4/11, 2014 at 9:37 Comment(0)
P
1

This might help some people, as it helped me fix the history.go(-1) not working in google chrome browser.

// Doesn't work in Chrome browser
function onBackKeyDown() {
    history.go(-1);
    navigator.app.backHistory();
}

// Does work in Chrome browser
function onBackKeyDown() {
    history.go(-1);
    return false; //needed in chrome to prevent about:blank page.
    navigator.app.backHistory();
    return false; //needed in chrome to prevent about:blank page.
}

Im no expert at all in jQuery, but thought it might help someone, as I was looking for this answer but couldn't find it at first.

Prison answered 16/2, 2022 at 16:41 Comment(0)
A
-2

Solved! Stop getting "TypeError: navigator.app is undefined"

A function I created that will first check what device you're on and then apply the relevant 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);
    }
}

Call function by adding this to your back link/button:

onclick="onBackKeyDown()"
Allness answered 22/3, 2016 at 21:14 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.