2010-10-02 6 views
66
के भीतर से पेज बदलने के लिए

मैं निम्नलिखित कोड है कि जावास्क्रिप्ट के भीतर से पृष्ठों में परिवर्तन है:जावास्क्रिप्ट

var newUrl = [some code to build up URL string]; 
window.location.replace(newUrl); 

लेकिन यह शीर्ष URL नहीं बदलता है, तो जब कोई वापस बटन ऐसा नहीं 'क्लिक करता है पिछले पृष्ठ पर वापस नहीं जाओ।

मैं जावास्क्रिप्ट को शीर्ष यूआरएल कैसे बदल सकता हूं ताकि ब्राउज़र बैक बटन भी काम कर सके।

उत्तर

7

हम्म, मैं

का प्रयोग करेंगे मैं बिल्कुल यकीन नहीं है कि अगर तुम क्या मतलब है।

28

window.location या window.location.href लिए सरल बताए ठीक किया जाना चाहिए:

window.location = newUrl; 

हालांकि, तो आपका नया URL नया पृष्ठ लोड करने के लिए ब्राउज़र का कारण होगा, लेकिन यह लग रहा है आप से बाहर निकले बिना URL को संशोधित करना चाहते हैं की तरह वर्तमान पृष्ठ इसके लिए आपके पास दो विकल्प हैं:

  1. URL हैश का उपयोग करें। उदाहरण के लिए, आप एक नया पृष्ठ लोड किए बिना example.com से example.com#foo पर जा सकते हैं। यह आसान बनाने के लिए आप बस window.location.hash सेट कर सकते हैं। फिर, आपको HTML5 hashchange ईवेंट सुनना चाहिए, जब उपयोगकर्ता बैक बटन दबाता है तो निकाल दिया जाएगा। यह IE के पुराने संस्करणों में समर्थित नहीं है, लेकिन jQuery BBQ देखें, जो यह कार्य सभी ब्राउज़रों में करता है।

  2. आप पृष्ठ को पुनः लोड किए बिना पथ को संशोधित करने के लिए HTML5 इतिहास का उपयोग कर सकते हैं। यह आपको example.com/foo से example.com/bar में बदलने की अनुमति देगा। इस उपयोग करना आसान है:

    $(window).bind("popstate", function(e) { alert("location changed"); });

    :

    window.history.pushState("example.com/foo");

    जब उपयोगकर्ता प्रेस "वापस", आप खिड़की के popstate घटना, जिसे आप आसानी से (jQuery) को सुन सकते हैं प्राप्त करेंगे दुर्भाग्यवश, यह केवल क्रोम, सफारी और फ़ायरफ़ॉक्स 4 बीटा जैसे आधुनिक ब्राउज़र में समर्थित है।

+0

* तारों पर .replace विधि स्ट्रिंग इसे करने के लिए लागू किया गया था परिवर्तन नहीं होगा कर सकते हैं, यह एक नई स्ट्रिंग उत्पन्न करेगा। "* -' window.location.replace() 'विधि' String.prototype.replace() 'विधि के समान नहीं है क्योंकि' window.location' एक स्ट्रिंग नहीं है (यह एक वस्तु है)। 'window.location.replace()' वर्तमान यूआरएल को एक नए से बदलता है, जबकि इतिहास में पुराने यूआरएल की प्रविष्टि को ओवरराइट करना। –

+1

सुधार के लिए धन्यवाद, मैं तदनुसार अपना उत्तर अपडेट करूंगा। – bcherry

+2

वापस देखकर, यह अब तक का सबसे अच्छा जवाब है। document.location.href में pushState पर कुछ भी नहीं है – buley

5

तुम सिर्फ रिश्तेदार पथ अपडेट करना चाहते हैं तो आप भी

window.location.pathname = '/relative-link'

"http://domain.com" -> "http://domain.com/relative-link"