2015-12-06 10 views
9

के माध्यम से मैन्युअल परिवर्तन की अनुमति दिए बिना बैक बटन को सक्षम करना मेरे पास एक jQuery मोबाइल एप्लिकेशन है जो मैं विकसित कर रहा हूं। ब्राउजर के बैक बटन को गतिशील रूप से काम करने की अनुमति देने के लिए jQuery मोबाइल डिफ़ॉल्ट रूप से pushState का उपयोग करता है।यूआरएल

अब, मेरा आवेदन गतिशील रूप से अपने पृष्ठों को बदलने के लिए है, और उपयोगकर्ता को एप्लिकेशन लोड करते समय हमेशा सामने वाले पृष्ठ पर पहुंचना चाहिए।

समस्या यह है कि जब भी मैं एप्लिकेशन में किसी पृष्ठ पर जाता हूं तो jQuery मोबाइल यूआरएल में पेज हैश अपडेट करता है। अब, यदि उपयोगकर्ता एप्लिकेशन में एक ही हैश में प्रवेश करता है, तो jQuery मोबाइल स्वचालित रूप से उन्हें उस पृष्ठ पर ले जाएगा (जब मैं उन्हें अपने कोड से संभालना चाहता हूं)। साथ ही, यदि वे पृष्ठ को रीफ्रेश करते हैं, तो मैं चाहता हूं कि मेरा कोड उन्हें वापस ले जाए, जहां उन्हें होना चाहिए, सीधे यूआरएल के हैश पर नहीं ले जाया गया है।

इसे रोकने के लिए, मैं mobileinit घटना में निम्न कोड जोड़ने की कोशिश की:

$.mobile.hashListeningEnabled = false; 

यह काम करता है, लेकिन यह भी pushState अपडेट, जो बारी में वापस बटन टूट जाता है, जो मैं डॉन 'को निष्क्रिय टी होना चाहता हूँ।

उपयोगकर्ताओं को बैक बटन का उपयोग करने की अनुमति देने का सबसे अच्छा तरीका क्या होगा जबकि पृष्ठों के बीच मैन्युअल आंदोलन की अनुमति नहीं है?

+0

आपने इस प्रश्न पर अपने 100 प्रतिनिधि का निवेश किया है; आपके पास दो जवाब हैं, क्या उन्होंने आपकी समस्या को ठीक करने में आपकी मदद की? – Omar

उत्तर

6

मैं आपकी समस्या के लिए एक संभावित और सही समाधान का वर्णन करने के इतना तत्व की जरूरत नहीं है, लेकिन एक आसान एक यह होना चाहिए: कि एक और एक करने के लिए ले की तरह एक समारोह देते हैं अपने पृष्ठ पर हर कड़ी पर

इस:

$(DOMElem).on("click",function(){ 
    sessionStorage["urlChangedByLink"] = "true"; 
}); 

एक ही पृष्ठ पर आप इस के साथ कोई समस्या नहीं देखते हैं, तो कोशिश कर सकते हैं:

$(window).on("navigate", function(event, data) { 
    if(sessionStorage["urlChangedByLink"] == "true") 
    $.mobile.hashListeningEnabled = true; 
    else 
    $.mobile.hashListeningEnabled = false; 
}); 

या यह, अन्य पृष्ठ पर आप की जाँच करता है, तो यह भंडारण variabl ई exsist और की तुलना में अपने संचालन करते हैं:

if(sessionStorage["urlChangedByLink"] == "true") 
    continue navigation... 
else 
    window.history.back(); 
+0

एक उत्कृष्ट सुझाव Emanuele! मैंने अपने नेविगेशन संकटों में मेरी सहायता के लिए अतीत में स्थानीय स्टोरेज का उपयोग किया है। मुझे एक निर्देशिका नेविगेट करना पड़ा, इसलिए मैंने जिले के लिए 3 अंकों का कोड संग्रहीत किया ताकि मैं हमेशा जानता था कि मैं कहाँ था! –

+0

ऐसी कोई जगह नहीं होनी चाहिए जहां आपने sessionStorage ["urlChangedByLink"] को गलत पर सेट किया हो? अन्यथा यह हमेशा सच रहेगा। मुझे लगता है कि खिड़की नेविगेट हैंडलर के अंत में हमें इसे गलत पर सेट करना चाहिए। –

+0

गलत। इसमें रीफ्रेशिंग वर्तमान पृष्ठ शामिल नहीं है और न ही हैश के साथ मैन्युअल रूप से पृष्ठों तक पहुंच है। मुझे आश्चर्य है कि क्यों उपयोगकर्ता एक पूरी तरह गलत जवाब देते हैं। – Omar

0

यहाँ विकल्प अपने प्रत्येक पृष्ठ के लिए data-url स्थापित करने के लिए आप बस अपने पेज div को विशेषता जोड़ने और इसे अपने मुख पृष्ठ के बराबर के लिए url सेट कि जिस तरह से है इतिहास में दिखाए गए पृष्ठ में हैश मान नहीं हैं (या आप अपने स्वयं के मान शामिल कर सकते हैं)। इस पर प्रलेखन बेहतर समझाया गया है in the jquery mobile documentation