2009-08-11 9 views
22

में संभावित समस्याएं हैं मेरे पास कुछ जावास्क्रिप्ट कोड है जो एक बिंदु पर window.location.hash को एक विशिष्ट स्ट्रिंग पर सेट करता है। यह फ़ायरफ़ॉक्स 3 में ठीक काम करता है, लेकिन मैं जानना चाहता हूं कि मैं बाद में समस्याओं में भाग लेगा, यानी यह एक क्रॉस-ब्राउज़र समाधान है (आईई 6 शामिल है)?window.location.hash

इसके अलावा, मैं ReallySimpleHistory का उपयोग कर रहा हूं। क्या यह अपनी आंतरिक स्थिति को गड़बड़ कर देगा?

धन्यवाद

उत्तर

24

window.location.hash 1 99 5 में नेटस्केप नेविगेटर 2 में जावास्क्रिप्ट को पेश करने के बाद से आसपास रहा है। इसे पहली बार माइक्रोसॉफ्ट द्वारा इंटरनेट एक्सप्लोरर 3 में 1 99 6 में समर्थित किया गया था। मुझे लगता है कि आप उचित रूप से निश्चित हो सकते हैं कि प्रत्येक जेएस-सक्षम ब्राउज़र इसका समर्थन करता है।

स्रोत के माध्यम से एक त्वरित नज़र से, ऐसा लगता है कि ReallySimpleHistory इस संपत्ति का बहुत व्यापक उपयोग करता है, इसलिए आप इसे अच्छी तरह से तोड़ सकते हैं। आप इसके बजाय add(newLocation) विधि का उपयोग करना चाहेंगे (जो window.location.hash सेट करके काम करता है)।

+0

धन्यवाद। मैं उद्देश्य पर ऐड() विधि से परहेज कर रहा था क्योंकि मैं मूर्खता से इतिहास बिंदु स्थापित करने से बचना चाहता था, लेकिन यह – Cameron

15

प्राप्त करें:

var hash = location.hash.slice(1); 

सेट:

location.hash = '#' + 'string'; 
+1

मैं हैश को बदलने की कोशिश कर रहा हूं, इसे वापस नहीं पढ़ा – Cameron

+0

क्षमा करें, मैंने अपनी पोस्ट अपडेट की है। – Thinker

+5

क्यों न केवल location.hash संपत्ति का उपयोग करें?यह वही है, और जैसा कि नेटस्केप नेविगेटर 2 (1 99 5) के आसपास रहा है, आप शर्त लगा सकते हैं कि यह हर जगह समर्थित है। – NickFitz

3

स्थापना window.location.hash IE6 & IE7 में ठीक काम करता है।

कुछ अवसरों में, एक सेट के ठीक बाद आईई 6 के तहत window.location.hash पढ़ना पुराने मान को वापस कर देगा, लेकिन ब्राउजर ने सफलतापूर्वक हैश सेट कर दिया है। एक उदाहरण:

alert(window.location.hash); 
window.location.hash = '#newHash'; 

/* Sometimes, it will return the old value, 
    I haven't figured out why it does that, and 
    it's rather rare. */ 
alert(window.location.hash); 

यदि आप इसे सेट करने के लिए इसका उपयोग कर रहे हैं, तो आपको किसी भी समस्या में भाग नहीं लेना चाहिए।

4

सभी "आधुनिक" (ए.के.ए.ए-ग्रेडेड) ब्राउज़र हैश सेट करने की अनुमति देते हैं और ऐसा करते समय पृष्ठ को पुनः लोड नहीं करते हैं। पृष्ठ को फिर से लोड करें कुछ पुराने हैं, जैसे कि सफारी 2.0.4 और ओपेरा 8.5x

my Usenet post on comp.lang.javascript देखें जहां मैं इसे थोड़ा और विस्तार से समझाता हूं।

यह भी ध्यान दें कि एचटीएमएल 5 आखिरकार निर्दिष्ट करता है कि हैश सेटर को वास्तविक हैश बदलना चाहिए लेकिन पृष्ठ को फिर से लोड नहीं करना चाहिए।

+0

+1 असंभव साबित हुआ, यह स्वीकार्य उत्तर होना चाहिए। – Pacerier

10

पुराना धागा मुझे पता है, लेकिन window.location.hash आकार सीमा के अधीन भी है। यदि आप बड़ी मात्रा में डेटा पास कर रहे हैं, और हैश में राज्य को सहेजना चाहते हैं, तो आप कुछ मुद्दों में भाग सकते हैं।

आईई आपको त्रुटि देगा: SCRIPT5 - Access denied. यदि आप सीमा सीमा से अधिक हैश असाइन करने का प्रयास करते हैं जो सुपर उपयोगी है।

बस विचार के लिए भोजन।

+0

+1। जानना अच्छा है, धन्यवाद! – Cameron

+0

धन्यवाद, बहुत उपयोगी है। आईई में सीधे यूआरएल दर्ज करने का प्रयास करते समय, यदि यह बहुत लंबा है, तो यह "बस" कट जाता है ... –

+0

आपने इस के साथ अपना जीवन बचाया, बहुत धन्यवाद! –

संबंधित मुद्दे