दिलचस्प पोस्ट
RequireJS का उपयोग कर बैकबोन और अंडर्सको लोड करना सी # में विशिष्ट समय पर, एक विधि को दैनिक कैसे कॉल करें? एक <चयन करें> jQuery का उपयोग करने के लिए विकल्प जोड़ना? क्या PHP में मूल्य या संदर्भ से पारित किया गया है? एंड्रॉइड: java.lang.SecurityException: अनुमति अस्वीकृति: आरंभ आशय ViewModel में कमांड के लिए WPF बाध्यकारी यूआई इवेंट्स Asp.NET MVC 3 में JSON.NET डिफ़ॉल्ट JSON सीरियललाइज़ के रूप में उपयोग करना – क्या यह संभव है? PHP में एक अनिवार्य समारोह क्या है? आराम एपीआई – क्यों उपयोग करें हटाओ पोस्ट हटाओ? एक प्रकार से एक नया ऑब्जेक्ट उदाहरण प्राप्त करें अपवाद या त्रुटि कोड जावा में स्ट्रिंग की तुलना और स्ट्रिंग इंटर्निंग सी ++ / सीएलआई में, टोपी वर्ण क्या करता है? Android: View.setID (int id) प्रोग्राममैटिक रूप से – ID संघर्षों से कैसे बचें? अतुल्यकालिक कार्य थ्रॉटलिंग

पर – window.location.hash – बदलें?

मैं नेविगेशन के लिए अजाक्स और हैश का उपयोग कर रहा हूं।

क्या यह देखने का एक तरीका है कि क्या window.location.hash

http://example.com/blah # 123 से http://example.com/blah # 456

यह काम करता है अगर मैं दस्तावेज़ को लोड होने पर देखता हूं।

लेकिन अगर मेरे पास #hash आधारित नेविगेशन है, तो यह काम नहीं करता है जब मैं ब्राउज़र पर बैक बटन दबाता हूं (इसलिए मैं ब्ला # 456 से ब्लाह # 123 पर कूदता हूं)।

यह पता बॉक्स के अंदर दिखाता है, लेकिन मैं इसे जावास्क्रिप्ट के साथ पकड़ नहीं सकता।

वेब के समाधान से एकत्रित समाधान "पर – window.location.hash – बदलें?"

वास्तव में ऐसा करने का एकमात्र तरीका (और यह है कि वास्तव में 'वास्तविकता' यह कैसे करता है), एक अंतराल सेट कर रहा है जो वर्तमान हैश की जांच करता है, और इससे पहले की तुलना में इसकी तुलना करता है, हम ऐसा करते हैं और ग्राहकों को बदले जाने की सदस्यता देता है घटना है कि हम आग अगर हैश बदलता है .. यह सही नहीं है लेकिन ब्राउज़र वास्तव में इस घटना को natively समर्थन नहीं करते हैं


इस जवाब को ताज़ा रखने के लिए अद्यतन करें:

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

 $(window).on('hashchange', function() { //.. work .. }); 

यहां अच्छी बात यह है कि आप उस कोड को लिख सकते हैं, जो कि हैश बदल समर्थन के बारे में चिंता करने की आवश्यकता नहीं है, हालांकि आपको कुछ जादू करने की ज़रूरत है, कुछ हद तक कम ज्ञात jQuery फीचर jQuery विशेष घटनाओं के रूप में ।

इस सुविधा के साथ आप किसी भी घटना के लिए कुछ सेटअप कोड चलाने के लिए अनिवार्य रूप से प्राप्त करते हैं, पहली बार किसी ने किसी भी तरह से ईवेंट का उपयोग करने का प्रयास किया (जैसे कि घटना के लिए बाध्यकारी)।

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

यह इस समर्थन समस्या को समझने के लिए आपके कोड को पूरी तरह से बंद कर देता है, इस प्रकार की विशेष घटना को लागू करना तुच्छ है (सरल 98% कार्यप्रणाली प्राप्त करने के लिए), लेकिन ऐसा क्यों करते हैं जब कोई अन्य पहले से ही है

एचटीएमएल 5 एक hashchange इवेंट को निर्दिष्ट करता है । यह इवेंट अब सभी आधुनिक ब्राउज़रों द्वारा समर्थित है निम्नलिखित ब्राउज़र संस्करणों में समर्थन जोड़ा गया था:

  • इंटरनेट एक्सप्लोरर 8
  • फ़ायरफ़ॉक्स 3.6
  • क्रोम 5
  • सफारी 5
  • ओपेरा 10.6

ध्यान दें कि इंटरनेट एक्सप्लोरर 7 और इंटरनेट एक्सप्लोरर 9 के मामले में if स्टेटमेंट सही (खिड़कियों में "ऑनशैश" के लिए) देगा, लेकिन खिड़की.ऑनशैश बदलेगा, तो यह हैश संग्रहित करना और हर 100 मिलीसेकेंड के बाद इसे जांचना बेहतर होगा यह इंटरनेट एक्सप्लोरर के सभी संस्करणों के लिए बदल गया है या नहीं।

  if (("onhashchange" in window) && !($.browser.msie)) { window.onhashchange = function () { alert(window.location.hash); } // Or $(window).bind( 'hashchange',function(e) { // alert(window.location.hash); // }); } else { var prevHash = window.location.hash; window.setInterval(function () { if (window.location.hash != prevHash) { prevHash = window.location.hash; alert(window.location.hash); } }, 100); } 

संपादित करें – चूंकि jQuery 1.9, $.browser.msie समर्थित नहीं है स्रोत: http://api.jquery.com/jquery.browser/

IE ब्राउज़र में इतिहास और window.location.hash से निपटने के लिए बहुत सारी तरकीबें हैं:

  • मूल प्रश्न के मुताबिक, यदि आप पेज पर एक html # b से जाना है तो # # # # # # # # # # # # # # # # # बस # # # # # # # # # # # # # # # मुझे इसे एक उदाहरण के साथ कहते हैं: window.location.href 'a.html # c' होगा, भले ही आप एक html # b या a.html # c में हों

  • दरअसल, a.html # b और a.html # c इतिहास में संग्रहीत किए जाते हैं, यदि तत्व '<a name="#b">' और '<a name="#c">' पृष्ठ में पहले से मौजूद है।

  • हालांकि, यदि आप किसी पेज के अंदर एक आइफ्रेम डालते हैं, तो iframe में एक.html # b से a.html # c से नेविगेट करें और फिर वापस बटन दबाएं, iframe.contentWindow.document.location.href में अपेक्षित परिवर्तन

  • यदि आप अपने कोड में 'document.domain = something ' का उपयोग करते हैं, तो आप iframe.contentWindow.document.open () 'तक पहुंच नहीं सकते हैं (और कई इतिहास प्रबंधक ऐसा करते हैं)

मुझे पता है यह एक वास्तविक प्रतिक्रिया नहीं है, लेकिन शायद आईई-इतिहास नोट्स किसी के लिए उपयोगी हैं।

फायरफॉक्स में 3.6 के बाद से एक ऑनशैश परिवर्तनीय आयोजन था। खिड़की देखें।

बेन अल्मैन के साथ काम करने के लिए एक महान jQuery प्लगइन है: http://benalman.com/projects/jquery-hashchange-plugin/

यदि आप jQuery का उपयोग नहीं कर रहे हैं तो यह विच्छेदन करने के लिए एक दिलचस्प संदर्भ हो सकता है।

आप आसानी से "window.location" ऑब्जेक्ट की "हैश" संपत्ति पर एक पर्यवेक्षक ("घड़ी" विधि) को लागू कर सकते हैं।

ऑब्जेक्ट के परिवर्तन देखने के लिए फ़ायरफ़ॉक्स का अपना स्वयं का कार्यान्वयन है , लेकिन यदि आप अन्य ब्राउज़रों के लिए कुछ अन्य कार्यान्वयन (जैसे कि वस्तु के गुणों को जावास्क्रिप्ट में बदलते हैं ) का उपयोग करते हैं – जो कि चाल करेंगे

कोड ऐसा दिखेगा:

 window.location.watch( 'hash', function(id,oldVal,newVal){ console.log("the window's hash value has changed from "+oldval+" to "+newVal); } ); 

तब आप इसका परीक्षण कर सकते हैं:

 var myHashLink = "home"; window.location = window.location + "#" + myHashLink; 

और निश्चित रूप से आपके पर्यवेक्षक समारोह को ट्रिगर किया जाएगा।

एक सभ्य कार्यान्वयन http://code.google.com/p/reallysimplehistory/ पर पाया जा सकता है केवल (लेकिन यह भी) समस्या और बग है: Internet Explorer में स्थान हैश को संशोधित करने से मैन्युअल रूप से पूरे इतिहास स्टैक को रीसेट कर दिया जाएगा (यह एक ब्राउज़र मुद्दा है और इसे हल नहीं किया जा सकता है)।

नोट, इंटरनेट एक्सप्लोरर 8 में "हैश परिवर्तनीय" इवेंट के लिए समर्थन है, और चूंकि यह एचटीएमएल का हिस्सा बन रहा है, आप अन्य ब्राउज़रों को पकड़ने की उम्मीद कर सकते हैं।

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

एक और प्रोजेक्ट के रूप में अच्छी तरह से ध्यान देने योग्य है jQuery अजैक्स जो कि jQuery के इतिहास के लिए एक विस्तार है, मिश्रण के लिए अजाक्स जोड़ने के लिए। जैसा कि आप हैश के साथ एजाक्स का उपयोग करना शुरू करते हैं, यह काफी जटिल है !

 var page_url = 'http://www.yoursite.com/'; // full path leading up to hash; var current_url_w_hash = page_url + window.location.hash; // now you might have something like: http://www.yoursite.com/#123 function TrackHash() { if (document.location != page_url + current_url_w_hash) { window.location = document.location; } return false; } var RunTabs = setInterval(TrackHash, 200); 

यही है … अब, कभी भी आप अपना बैक या फॉरवर्ड बटन दबाते हैं, पेज नए हॅश वैल्यू के अनुसार पुनः लोड होगा।

मैं अपने ग्राहक की ओर रूटिंग के लिए path.js का उपयोग कर रहा हूं। मैंने इसे काफी संक्षिप्त और हल्के (यह भी एनपीएम में प्रकाशित किया गया है) पाया है, और हैश आधारित नेविगेशन का उपयोग करता है

पथ.जेएस एनपीएम

path.js GitHub

मैं एक jQuery प्लगइन का उपयोग किया, HUtil , और इसके ऊपर एक इंटरफ़ेस की तरह YUI इतिहास लिखा।

एक बार इसे बाहर की जाँच करें अगर आपको मदद की ज़रूरत है तो मैं मदद कर सकता हूं।