2011-02-17 25 views
17

मैं ब्राउज़र का समर्थन करने में window.history.pushState() फ़ंक्शन का उपयोग करना चाहता हूं। दुर्भाग्यवश मुझे फ़ायरफ़ॉक्स पर एक त्रुटि मिल रही है:मैं window.history.pushState 'safely' का उपयोग कैसे कर सकता हूं

TypeError: history.pushState is not a function

इससे बचने के लिए कैसे संभव है?

उत्तर

18

[कोशिश-पकड़] टैग का तात्पर्य क्या आप इस सवाल का जवाब पहले से ही पता ... (वहाँ अधिक विशिष्ट कुछ भी है?) अन्य possibitity if (history.pushState) history.pushState({}, document.title, location.href);

23

जाँच करने के लिए हालांकि मैं जावास्क्रिप्ट में यह परीक्षण नहीं किया है, मैं अन्य भाषाओं की कोशिश-पकड़ है कि और अधिक एक साधारण अगर से गहन संसाधन है में पता है ...

उपयोग:

if(history.pushState) { 
    history.pushState({"id":100}, document.title, location.href); 
} 

ध्यान रखें कि जब आप वापस बटन क्लिक करें, कुछ भी नहीं है वास्तव में जब तक आप को लागू होता है window.onpopstate। आपको सामग्री को पकड़ने के लिए आवश्यक डेटा में आपको पास करने की आवश्यकता होगी:

if(history.pushState && history.replaceState) { 
    //push current id, title and url 
    history.pushState({"id":100}, document.title, location.href); 

    //push new information 
    history.pushState({"id":101}, "new title", "/new-url/"); 

    //this executes when you use the back button 
    window.onpopstate = function(e) { 
     alert(e.state.id); 
     //perhaps use an ajax call to update content based on the e.state.id 
    }; 
} 
+4

नोट: history.popstate को एक बार कहा जाता है - तुरंत पहले पृष्ठ लोड पर: और यह डिज़ाइन द्वारा है। –

0

इतिहास API के लिए एक शिम मौजूद है। History.js पुराने ब्राउज़र में इतिहास API की नकल करने के लिए दस्तावेज़ खंड पहचानकर्ताओं के साथ HTML4 के हैशचेंज ईवेंट का उपयोग करता है। यदि किसी आधुनिक ब्राउज़र द्वारा हैश यूआरएल में से एक का उपयोग किया जाता है, तो यह यूआरएल को चुपचाप सही करने के लिए replaceState का उपयोग करता है।

आप के बारे में यह पुराने ब्राउज़र में काम नहीं कर रहा और तुम सिर्फ एक त्रुटि फेंक बिना इसका उपयोग करना चाहते परवाह नहीं कर रहे हैं, मैं यह कर ...

window.history && window.history.pushState && window.history.pushState("", "", url); 

यह जाँच करता है कि इतिहास और pushstate समारोह इसका उपयोग करने से पहले मौजूद है।

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