我正在爲客戶端編寫一個Android應用程序。我一直在使用我自己的框架來創建應用程序。History.pushState和遍歷歷史 - PhoneGap/Android
這個框架在iPhones上沒有問題,但是當我將它應用到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()
被稱爲例如,當列表是點擊或按下按鈕。
這種情況適用於通過應用程序導航的任何其他組合。
有沒有人有這方面的經驗或類似的東西?
你正在使用哪個版本的android和phonegap? – Akhil
我使用科爾多瓦2.4.0,這應該適用於任何支持的Android版本。 – freshnode
你測試過哪種Android版本? Honeycomb使用loadUrl(Cordova使用)和哈希中存在一個錯誤:http://code.google.com/p/android/issues/detail?id=19293也許這跟它有關係?最新的科爾多瓦(2.6)上還存在這個問題嗎?你是否有什麼特別的理由要編寫你自己的歷史模塊,而不是使用內置於科爾多瓦的模塊? – MBillau