我有一个与Cordova一起开发的混合应用程序。该应用程序非常简单,所以我还没有使用过框架。几乎所有页面都是使用jQuery的ajax()
方法通过Ajax注入的,然后通过pushState()
方法使用HTML5 History API添加到历史记录中。
为了让用户返回之前访问过的页面(历史记录中的页面),我创建了一个按钮。我监听backbutton
事件以及点击该按钮,当事件被触发时,我执行以下处理程序:
onBackButton: function() {
window.history.length === 0 ? navigator.app.exitApp() : window.history.back();
}
为了确保最大程度的兼容性,我还在项目中添加了history.js。
它就像Android上的魅力和Mac上的iOS模拟器一样,但不适用于真实设备。会发生什么是iOS捕获事件但该方法的执行不会更改页面。我已经根据StackOverflow上的先前答案尝试了几种方法,但没有运气。一些示例包括:history.back() not working in phonegap ios build和Phonegap - navigator.app.backHistory() not working on HTML back button。
我能尝试什么?
答案 0 :(得分:5)
你可以简单地使用,
history.go(-1);
导航回来。
答案 1 :(得分:1)
试试这个。
main.js
var pagesHistory = [];
var currentPage = {};
var path = "";
page1.js
currentPage = {};
currentPage.back = function() {
pagesHistory.pop();
};
currentPage.loadPage2 = function() {
pagesHistory.push(path + "pages/Page2.html");
};
page2.js
currentPage = {};
currentPage.back = function() {
pagesHistory.pop();
};
currentPage.loadPage1 = function() {
pagesHistory.push(path + "pages/Page1.html");
};
答案 2 :(得分:1)
几个月前看到这个答案?显然,iOS仅通过脚本导航历史记录时会遇到一些安全问题。这里的答案还包括通过散列网址来解决问题:StackOverflow Question
答案 3 :(得分:0)
不知道cordova本身是否有导航器..但我通常使用此功能返回:
function goBack() {
//or history.back()
history.go(-1);
navigator.app.backHistory();
}
无法测试它。
编辑: 由于你没有通过ajax完全刷新和加载几乎所有东西,你可能必须自己实现历史记录... iphone在返回时只有javascript页面有一些问题。既然你将你的行动推向历史,那就不应该变得艰难:
window.addEventListener("popstate", function(e) {
//get it from the history, execute your functions to show the page as usual
});
答案 4 :(得分:0)
app.application.navigate("#:back")
怎么样?
答案 5 :(得分:-1)
我不使用Cordova,但此代码可能会对您有所帮助:
String . prototype . isEmpty = function () { return this . length === 0; };
var browserHistory;
function hash ( name, historyChange )
{
"use strict";
if ( name !== undefined )
{
if ( hash () !== name )
{
if ( ! historyChange ) { browserHistory . add ( name ); }
window . location . hash = name;
}
}
else
{
var newHash = window . location . hash . split ( "#" ) [ 1 ];
return newHash === undefined ? "" : newHash;
}
}
browserHistory =
{
currentIndex : 0,
history : [],
add : function ( name )
{
"use strict";
this . currentIndex = this . currentIndex + 1;
if ( this . history . length - 1 > this . currentIndex ) { this . history . splice ( this . currentIndex ); }
this . history . push ( name );
},
backward : function ()
{
"use strict";
if ( this . currentIndex === 0 ) { return; }
this . currentIndex = this . currentIndex - 1;
this . changeHash ();
},
changeHash : function ()
{
"use strict";
hash ( this . history [ this . currentIndex ], true );
},
forward : function ()
{
"use strict";
if ( this . currentIndex === this . history . length - 1 ) { return; }
this . currentIndex = this . currentIndex + 1;
this . changeHash ();
},
init : function ( name )
{
"use strict";
this . history . push ( name );
}
};
window . onhashchange = function ()
{
"use strict";
if ( hash () . isEmpty () ) { load ( { name: "" } ); }
else { load ( { name: hash () } ); }
};
window . onload = function ()
{
"use strict";
if ( ! hash () . isEmpty () )
{
browserHistory . init ( hash () );
load ( { name: hash () } );
}
else { browserHistory . init ( "" ); }
};
这个脚本:
1)使用使用哈希的网站(http(s)://(www.)name.domain /#urlHash)。
Examle:
https://www.example.com/page - default url
https://www.example.com/page#login - login subpage
https://www.example.com/page#images - images subpage
etc.
2)"窗口。的onload"函数检查输入的url是否包含一个hash和init browserHistory,或者包含:"" (空字符串) - 没有哈希是我的主页
3)" browserHistory"对象保存页面历史
4)"哈希"不带参数调用的函数返回当前url哈希并使用" name"参数更改网址哈希
5)当哈希值改变时#34;窗口。 onhashchange"功能称为
6)"窗口。 onhashchange"功能检查哈希
如果url不包含hash,则脚本会加载默认页面
如果url包含哈希,则脚本会根据哈希加载子页面
7)在功能"加载" (这里没有描述)我有一个XMLHttpRequest,它使用name参数调用php文件并设置为从该php文件返回的主div元素html代码。
8)而不是(例如):
<a class="a_nice_style" href="https://www.example.com/images.html>Images gallery</a>
您可以使用(例如):
<p class="a_nice_style" onclick="hash ( 'images' );">Images gallery</p>
9)名为:&#34; load&#34;将对象作为参数。此对象发送到php文件(作为&#34; $ _ GET&#34;或&#34; $ _ POST&#34;数组),因此您可以调用&#34; load&#34;具有自定义对象的函数,该自定义对象包含例如登录字段值 10)&#34; browserHistory&#34;只有你页面的哈希。
这将是你的按钮onclick功能:
onBackButton: function() { browserHistory . backward (); }
您可以修改&#34; browserHistory。向后&#34;通过替换退出您的应用程序的功能:&#34; return;&#34;在这一行:
if ( this . currentIndex === 0 ) { return; }
使用您的应用程序退出代码。