Window.location.href, window.location.replace और window.location.assign के बीच अंतर


129

दोनों के बीच क्या अंतर है

  1. window.location.href="http://example.com";
  2. window.location.replace("http://example.com");
  3. window.location.assign("http://example.com");

मैंने कई मंचों में पढ़ा है जो window.location.assign()सिर्फ वर्तमान सत्र इतिहास की जगह लेता है और इसलिए ब्राउज़र का बैक बटन काम नहीं करेगा। हालांकि, मैं इसे पुन: पेश करने में सक्षम नहीं हूं।

function fnSetVariable() {
    //window.location.href = "http://example.com";
    window.location.replace("http://example.com");
    //window.location.assign("http://example.com");
}

<a onmouseover="fnSetVariable();" 
   href="PageCachingByParam.aspx?id=12" >
   CLICK 
</a>

1
आप url में एक पुराना पोस्ट देख सकते हैं: stackoverflow.com/questions/1865837/ ... आशा है कि यह मददगार होगा

यहाँ एक बेहतर व्याख्या है: stackoverflow.com/a/847130/96656
Mathias Bynens

जवाबों:


165

ये एक ही काम करते हैं:

window.location.assign(url);
window.location = url;
window.location.href = url;

वे बस नए URL पर नेविगेट करते हैं। replaceदूसरी ओर की विधि इतिहास में एक नया रिकॉर्ड जोड़े बिना URL पर नेविगेट करती है।

इसलिए, आपने उन कई रूपों में जो पढ़ा है, वह सही नहीं है। assignविधि इतिहास के लिए एक नया रिकार्ड जोड़ता है।

संदर्भ: http://developer.mozilla.org/en/window.location


1
उत्तर के लिए बहुत बहुत धन्यवाद। ब्राउज़र बैक बटन समस्या को हल करने के लिए इसने मुझे बहुत मदद की।
संतोष कुमार संरक्षक

@blunderboy: यह किसी भी तरह से एक भूस्खलन द्वारा शीर्ष उत्तर है, ताकि कोई चीज़ न बदले।
BoltClock

तो देर किस बात की assign()? इस उत्तर से, और डॉक्स से, यह समान लगता है location = ...
Mitya

11

बैक बटन का उपयोग नहीं कर पाने के बारे में यह एक सामान्य गलत व्याख्या है। window.location.replace (URL) पृष्ठ इतिहास सूची से शीर्ष एक प्रविष्टि को नई प्रविष्टि के साथ अधिलेखित करके फेंक देता है , इसलिए उपयोगकर्ता आसानी से उस एक विशेष वेबपृष्ठ पर वापस नहीं जा सकता है। फ़ंक्शन पूरे पृष्ठ इतिहास सूची को मिटा नहीं करता है , और न ही यह बैक बटन को पूरी तरह से गैर-कार्यात्मक बनाता है।

(कोई फ़ंक्शन और न ही ऐसे मापदंडों का संयोजन जो मुझे पता है कि इतिहास सूची प्रविष्टियों को बदल या अधिलेखित कर सकते हैं जो आप निश्चित रूप से स्वयं के लिए नहीं करते हैं - आमतौर पर ब्राउज़र इस सुरक्षा सीमा को केवल किसी भी ऑपरेशन को परिभाषित करने से नहीं रोकते हैं जो सभी के अलावा किसी भी प्रविष्टि को प्रभावित कर सकते हैं पृष्ठ इतिहास सूची में सबसे ऊपर । मैं यह सोचने के लिए झकझोरता हूं कि अगर इस तरह का कोई कार्य होता है तो किस प्रकार की खतरनाक चीजें मैलवेयर कर सकती हैं।)

यदि आप वास्तव में बैक बटन को गैर-कार्यात्मक बनाना चाहते हैं (शायद "उपयोगकर्ता के अनुकूल नहीं": फिर से सोचें कि क्या वास्तव में आप क्या करना चाहते हैं), एक ब्रांड की नई विंडो को "खोलें"। (आप एक "पॉप" खोल सकते हैं जिसमें "बैक" बटन भी नहीं है ... लेकिन पॉपअप इन दिनों बहुत लोकप्रिय नहीं हैं :-) यदि आप अपने पेज को रखना चाहते हैं, तो कोई फर्क नहीं पड़ता कि उपयोगकर्ता क्या करता है ( फिर से "उपयोगकर्ता मित्रता" संदिग्ध है), एक window.onunload हैंडलर सेट करें जो आपके पेज को फिर से लोड करता है जो हर बार बहुत शुरुआत से ही स्पष्ट होता है।


4
'नो फंक्शन और न ही उन मापदंडों का संयोजन जो मुझे पता है कि इतिहास सूची प्रविष्टियों को बदल या अधिलेखित कर सकते हैं' ... HTML5 में आपका स्वागत है
SpYk3HH

6
ब्राउज़र इतिहास प्रविष्टियों को बदलने या अधिलेखित करने में असमर्थता आपके पास एक सुरक्षा नियम नहीं है जो लंबे समय से आसपास है । HTML5 बस उस नियम को जारी रखता है।
चक कोलार

आप बिंदु या व्यंग्य में चूक गए। एचटीएमएल 5 और इतिहास देखें
स्पिक 3 एचएच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.