我正在为客户编写Android应用程序。我一直在使用自己的框架来创建应用程序。
这个框架在iPhone上没有问题,但是当我将它应用到Android / Phonegap时,我遇到了后退按钮的问题。我的解决方案是调用History对象来创建项目,因为查看了不同的页面。这段代码的要点如下:
'hook_call': function (name, data, callback, skip_history) {
if (typeof callback != 'function') {
callback = function () {};
}
app.handlers[name].call(this, data, callback);
window.app.current_hook = name;
// Manage history
if(!skip_history ) {
history.pushState({'page': name, 'data': data}, null, '#'+name);
}
}
我的onpopstate功能:
// Manage history
window.onpopstate = function(event) {
try {
if(window.app.current_hook != event.state.page)
window.app.hook_call(event.state.page, event.state.data);
}
catch(e) {}
};
因此,这会正确添加项目。但是,如果我在历史记录中说三个级别(home
,listings
- > view_listing
)并从view_listing
按回来,我将被带到listings
}部分,这是正确的,但任何进一步的按下都会让我离开listings
,它不会再向后移动。
当我在刚刚解释的导航步骤后查看日志时,我看到了这些虚假的项目:
04-16 10:22:39.320: D/CordovaWebView(1148): The current URL is: file:///android_asset/www/index.html#listing
04-16 10:22:39.320: D/CordovaWebView(1148): The URL at item 0 is:file:///android_asset/www/index.html
04-16 10:22:39.400: D/CordovaWebView(1148): The URL at index: 0is file:///android_asset/www/index.html
04-16 10:22:39.400: D/CordovaWebView(1148): The URL at index: 1is file:///android_asset/www/index.html#welcome
04-16 10:22:39.400: D/CordovaWebView(1148): The URL at index: 2is file:///android_asset/www/index.html#listings
04-16 10:22:39.410: D/CordovaWebView(1148): The URL at index: 3is file:///android_asset/www/index.html#listing
我应该添加它来访问不同的页面,例如在点击列表或按下按钮时调用hook_call()
。
此方案适用于通过应用程序导航的任何其他组合。
有没有人有过这种或类似的经历?
答案 0 :(得分:3)
我相信你的函数看起来像这样,并设置了skip_history标志:
// Manage history
window.onpopstate = function(event) {
try {
if(window.app.current_hook != event.state.page)
window.app.hook_call(event.state.page, event.state.data, null, true);
}
catch(e) {}
};
由于您不想推送历史记录,因此您只需将其弹回堆栈。