Phonegap - navigator.app.backHistory() 不适用于 HTML 后退按钮
Posted
技术标签:
【中文标题】Phonegap - navigator.app.backHistory() 不适用于 HTML 后退按钮【英文标题】:Phonegap - navigator.app.backHistory() not working on HTML back button 【发布时间】:2013-05-08 16:06:50 【问题描述】:在我的应用程序中,我使用的是 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" 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相同问题的人,请检查:***.com/questions/32761206/… 【参考方案1】:当我遇到同样的情况时,我尝试了 3 种不同的方法:
window.history.back()
navigator.app.backHistory();
History.go(-1);
就个人而言,这些都不能解决问题。我将所有 3 件事放在一起,令我惊讶的是它起作用了。我真的不知道背后是什么。
然后我减少到两个函数并删除:
window.history.back()
现在我正在使用这个功能,它工作正常。
//Works Fine
function onBackKeyDown()
history.go(-1);
navigator.app.backHistory();
【讨论】:
【参考方案2】:如果您在锚点上使用属性 data-rel="back",则对该锚点的任何点击都会模仿后退按钮,返回一个历史条目并忽略锚点的默认 href。
【讨论】:
相当肯定 data-rel="back" 只在 jQuery Mobile 中使用。【参考方案3】:这取决于你在哪里: 在我的 windowsphone 8.1 lumia 925 上,它可以工作 history.go(-1);, 而 navigator.app.backHistory(); 在崩溃之前导致异常。
在我的 android 上(我相信大多数人),navigator.app.backHistory(); 工作正常。
【讨论】:
【参考方案4】:这可能对某些人有所帮助,因为它帮助我修复了在 google chrome 浏览器中无法运行的 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 方面的专家,但我认为它可能会对某人有所帮助,因为我一直在寻找这个答案,但一开始找不到。
【讨论】:
【参考方案5】:解决了!停止收到“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()"
【讨论】:
以上是关于Phonegap - navigator.app.backHistory() 不适用于 HTML 后退按钮的主要内容,如果未能解决你的问题,请参考以下文章
Oracle JET mobile cordove navigator.app对象
Phonegap - Phonegap 到 Utils 更改
iPhone 错误 ld:/Users/Shared/PhoneGap/Frameworks/PhoneGap.framework/PhoneGap 中的重复符号 _SBJSONErrorDomain