2011-11-10 14 views
5

पर क्लिक करें क्या ब्राउज़र ब्राउज़र परिवर्तन (यानी बैक या फॉरवर्ड बटन) पर हैशचेंज का पता लगाना संभव है?जावास्क्रिप्ट/jQuery का पता हैश ब्राउजर बैक/फॉरवर्ड बटन पर केवल

मैंने पहले सेउफलोड ईवेंट देखा है, लेकिन यह घटना हैश परिवर्तन पर नहीं आती है, क्योंकि खिड़की उतार नहीं रही है।

हैशचेंज घटना स्पष्ट रूप से हैश परिवर्तनों को कभी भी आग लगती है। कोई फिक्स? एक प्लगइन के बिना पसंदीदा। मैंने jQuery इतिहास प्लगइन देखा है, लेकिन सबसे सरल समाधान की तलाश में हूं।

सहायता के लिए धन्यवाद।

उत्तर

4

window.onhashchange ईवेंट पर एक नज़र डालें।

हालांकि यह वर्तमान में सभी ब्राउज़रों में समर्थित नहीं है। बीए jQuery हैश चेंज प्लगइन here पर एक नज़र डालें। यदि आप अंत में प्लगइन का उपयोग करना चुनते हैं, तो यह काम कर सकता है।

मुझे आशा है कि इससे मदद मिलती है!

0

आप इसे हैश, या यहां तक ​​कि HTML5 इतिहास API के साथ भी नहीं कर सकते हैं। बैक या फॉरवर्ड बटन पर क्लिक करने वाले उपयोगकर्ता के साथ विशेष रूप से कोई घटना नहीं होती है। आपको मूल समस्या के लिए शायद एक अलग दृष्टिकोण की आवश्यकता है, जब तक किसी प्रकार के एक्सटेंशन या क्लाइंट मशीन पर स्थापित करना संभव नहीं है।

1

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

एक और चीज जो आप कर सकते हैं हैश के लिए प्रत्यय जोड़ना है (जब किसी भी घटना फायरिंग की जांच के आधार पर पीछे या आगे बटन से)। तो अगर आपके पास #pageTitle का हैश है तो आप इसे इंगित करने के लिए #pageTitle_chrome में बदल देंगे ताकि हैश को बैक बटन या फॉरवर्ड बटन से बदल दिया गया हो।

फिर, जब आप अपने हैंश की जांच कर रहे हों, तो आप यह देख सकते हैं कि इसमें _chrome है या नहीं, यह पता लगाने के लिए कि इसमें किस प्रकार का हैश बदल गया है।

2

मुझे लगता है कि क्रिस पूछ रहा था कि खिड़की के लिए एक रास्ता है। ऑनशैशचेंज ईवेंट केवल तभी काम करता है जब आप ब्राउज़र इतिहास (पीछे/आगे) बटन के माध्यम से नेविगेट कर रहे हों।

उत्तर = नहीं ... लेकिन आप फ़ंक्शन में कोई स्टेटमेंट डाल सकते हैं।
मैं यह कर जाएगा:

$('.nav').click(function() { //on the onclick event for your nav add a class 
    $(this).addClass('navClick'); // before you change the hash. 
    window.location.hash = 'state' + $(this).html(); 
}); 
function getLocationHash() { 
    return window.location.hash.substring(1); 
} 
window.onhashchange = function(e) { // if element does not exist with your 
    if ($('.navClick').length == 0) { // 'navClick' class then check hash 
    switch(getLocationHash()) { 
     case 'state1': 
     execute code block 1; 
     break; 
     case 'state2': 
     execute code block 2; 
     break; 
     default: 
     code to be executed if different from case 1 and 2; 
    } 
    } else {       // removes the class if it does 
    $('.navClick').removeClass('navClick'); 
    } 
}; 

मैं my site

यह सब गतिशील सामग्री बदल रहा है पर कुछ इसी तरह की थी। साइट स्टेटस का ट्रैक रखने के लिए मैं अभी भी window.location.hash का उपयोग करता हूं। यदि आप साइट के माध्यम से नेविगेट करते हैं और फिर साइट पर इतिहास के एक बार नेविगेट करने के लिए बैक फॉरवर्ड बटन का उपयोग करना शुरू करते हैं तो यह पृष्ठ को बाद में पृष्ठ को फिर से लोड करने की आवश्यकता के बजाय, गतिशील रूप से राज्यों को बदल देगा जैसे कि उपयोगकर्ता वास्तव में नौसेना के माध्यम से क्लिक कर रहा था। यदि आप नेविगेट करने के लिए इतिहास का उपयोग कर रहे हैं तो यह केवल हैश की जांच करता है।

6

जब भी मेरा नेविगेशन ट्रिगर किया गया था, तो मैंने ध्वज को चिह्नित किया, और यदि ध्वज चिह्नित किया गया था, तो हैश चेंज इवेंट इसे अनदेखा कर देगा, अन्यथा यह इसे संभालेगा जैसे कि यह एक बैक/फॉरवर्ड इवेंट था।