Phonegap - navigator.app.backHistory()在HTML返回按钮上不起作用

17

我的应用程序使用的是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();


对于那些在寻找 Cordova 3.8 和 iOS 9.0 相同问题的人,请查看以下链接:https://dev59.com/WI_ea4cB1Zd3GeqPOXFY#32777611 - kavain
5个回答

14

当我遇到同样的情况时,我尝试了三件不同的事情:

  • window.history.back()

  • navigator.app.backHistory();

  • History.go(-1);

单独使用这些功能无法解决问题。但是当我将所有三个函数一起使用时,非常惊讶地发现它奏效了。我真的不知道背后的原因。

然后我只保留了其中两个函数:

  • navigator.app.backHistory();
  • History.go(-1);

现在我正在使用这个函数,而且它运行得很好。

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

1

如果您在锚点上使用data-rel="back"属性,任何对该锚点的单击都会模仿后退按钮,返回一个历史记录条目并忽略锚点的默认href。

5
很确定 data-rel="back" 只在 jQuery Mobile 中使用。 - Johan Baaij

1

这取决于你所在的位置:在我的Windows Phone 8.1 Lumia 925上,history.go(-1);可以正常工作,而navigator.app.backHistory();会导致异常并崩溃。

在我的Android设备上(我相信大多数情况下),navigator.app.backHistory();可以正常工作。


1

这可能会帮助一些人,因为它帮助我解决了在谷歌浏览器中history.go(-1)无法正常工作的问题。

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

虽然我并不是jQuery的专家,但我认为这个答案可能会对某些人有所帮助,因为我一开始也在寻找这个答案,但没有找到。


-2

问题已解决!停止获取“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()"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接