असल में आपके पास दो इतिहास "बर्तन" हैं जिनके साथ आपको छेड़छाड़ की आवश्यकता है। ब्राउज़र और जेक्यूएम।
JQM urlHistory
आप JQMs urlHistory बहुत आसानी से बदल सकते हैं। JQM कोड से: तो ऊपर कार्यों के सभी
urlHistory = {
// Array of pages that are visited during a single page load.
// Each has a url and optional transition, title, and pageUrl
// (which represents the file path, in cases where URL is obscured, such as dialogs)
stack: [],
// maintain an index number for the active page in the stack
activeIndex: 0,
// get active
getActive: function() {
return urlHistory.stack[urlHistory.activeIndex];
},
getPrev: function() {
return urlHistory.stack[urlHistory.activeIndex - 1];
},
getNext: function() {
return urlHistory.stack[urlHistory.activeIndex + 1];
},
// addNew is used whenever a new page is added
addNew: function (url, transition, title, pageUrl, role) {
// if there's forward history, wipe it
if (urlHistory.getNext()) {
urlHistory.clearForward();
}
urlHistory.stack.push({
url: url,
transition: transition,
title: title,
pageUrl: pageUrl,
role: role
});
urlHistory.activeIndex = urlHistory.stack.length - 1;
},
//wipe urls ahead of active index
clearForward: function() {
urlHistory.stack = urlHistory.stack.slice(0, urlHistory.activeIndex + 1);
}
};
उपलब्ध हैं और उदाहरण के लिए इस तरह कहा जा सकता है:
$.mobile.urlHistory.clearForward();
अपने इतिहास पर नजर रखने, इस कहीं रख दिया और (एक बार pageChange के लिए सुनने के लिए बदलाव किया जाता है) क्या urlHistory अंदर है देखने के लिए:
$(document).on('pagechange', 'div:jqmData(role="page")', function(){
console.log($.mobile.urlHistory.stack);
});
वहां से आप को देखने के लिए क्या इतिहास में हो सकता है और यह साफ के रूप में आप की आवश्यकता चाहिए शुरू कर सकते हैं।
मैं urlHistory में संग्रहीत क्या है और क्या संग्रहीत नहीं किया जाना चाहिए, इसे संशोधित करने के लिए मैं अपनी खुद की नेविगेशन परत के लिए बहुत कुछ उपयोग कर रहा हूं। सिंक-इंग ब्राउज़र के साथ कठिन हिस्सा है ...
पर ब्राउज़र के साथ सिंक-इंग:
मेरे नेविगेशन परत में मैं केवल urlHistory से डबल प्रविष्टियां निकालने रहा हूँ, इसलिए हमेशा यह पेज है जब आप ब्राउज़र बैक बटन पर क्लिक करते हैं, तो (और दो नहीं) जाने के लिए। आपके मामले में, आप अनुमान लगाएंगे कि ब्राउज़र इतिहास में 4 प्रविष्टियां हैं, लेकिन यदि आप JQM urlHistory से 2 प्रविष्टियों को हटाते हैं, तो आपके पास होगा जब बैक बटन क्लिक किया गया है तो दो पृष्ठ "नहीं मिला"।तो अपने ब्राउज़र इतिहास इस तरह दिखता है:
www.google.com
www.somePage.com
www.YOUR_APP.com = page1
page2
page3
page4
और अपने निकालें पृष्ठ 2 और पृष्ठ 3, बैक बटन पर क्लिक परिणाम चाहिए में:
1st back-click = page4 > page1
2nd back-click = page1 > www.somePage.com [because you removed page3]
3rd back-click = www.somePage.com > www.google.com [because you removed page2]
एक सैद्धांतिक वैकल्पिक हल होगा:
- एक काउंटर रखें कि आप एक पृष्ठ में कितने "गहरे" जाते हैं
- JQM urlHistory से पृष्ठों को हटाएं और "कूदें" मान = काउंटर-हटाए गए पृष्ठ
- अगले ब्राउज़र पर वापस क्लिक करें, x window.history (पीछे) कूदें और केवल एक JQM संक्रमण पास करें। आप तनाव कम देगी, लेकिन URL page4> पृष्ठ 3> पृष्ठ 2> पृष्ठ 1 एक ही चरण में हैं और आप केवल JQM page4 से एक भी संक्रमण करने के लिए
- जांच क्या urlHistory में है पृष्ठ 1 और अपने "ट्रिपल वापस"
के बाद साफ करने के लिए अनुमति देते हैं
सावधान रहें एक इष्टतम समाधान नहीं है और आपको बहुत सी चीजों पर विचार करना होगा (उपयोगकर्ता वापस जाने से पहले कहीं और क्लिक करता है)। मैंने इस तरह कुछ ऐसा करने के लिए हमेशा एक जटिल सेटअप में काम करने की कोशिश की और आखिरकार इसका इस्तेमाल बंद कर दिया, क्योंकि यह कभी भी काम नहीं करता था। लेकिन एक सरल सेटअप के लिए यह बहुत अच्छी तरह से काम कर सकता है।
क्या आपको पुराने और नए देवताओं द्वारा आशीर्वाद दिया जा सकता है! –
जेएसएफ में, उदाहरण के लिए, मैंने jQuery मोबाइल के 'डेटा-रिले = "बैक" बटन के क्लिक को ओवरराइड करने के लिए इस दृष्टिकोण का उपयोग किया है: 'window.history.go (- # {प्रबंधितBean.count});', जो होगा 'window.history.go (-3) में बदलें; 'यदि आप पृष्ठ 4 में हैं, उदाहरण के लिए। – falsarella
मुझे jqm दस्तावेज़ों में $ .mobile.urlHistory नहीं मिल रहा है ... http://api.jquerymobile.com/?s=urlHistory – dsdsdsdsd