जावास्क्रिप्ट में window.location और document.location के बीच क्या अंतर है?


जवाबों:


220

W3C के अनुसार, वे समान हैं। वास्तव में, क्रॉस ब्राउज़र सुरक्षा के लिए, आपको इसके window.locationबजाय उपयोग करना चाहिए document.location

देखें: http://www.w3.org/TR/html/browsers.html#dom-location


12
Downvoted। उत्तर विरोधाभासी। यह साहसपूर्वक कहता है कि वे समान हैं, फिर हल्का पाठ में अंतर का वर्णन करता है। वे निश्चित रूप से समान नहीं हैं।
डैनॉर्टन

33
C'mon ट्रिगर-हैप्पी डाउन-वोटर, थोड़ा हल्का करें। अधिकांश भाग के लिए, वे इसी तरह व्यवहार करते हैं जैसे कि CAHAT के विनिर्देशन को rahul द्वारा परिभाषित किया गया है। चलो उसे शब्दार्थ पर नाखून नहीं। थोड़ा सा फिलाडेल्फिया, सज्जनों। मैंने, एक के लिए, उनके जवाब को पूरी तरह से संतोषजनक पाया। +1 (क्रिस्टोफ़ का स्वीकृत उत्तर होना चाहिए, लेकिन राहुल स्वीकार्य है - कम से कम, डाउन-वोट के योग्य नहीं है।)
cssyphus

7
-1 इसके लिए window.locationकोई औचित्य प्रदान किए बिना एक सर्वोत्तम अभ्यास (हमेशा उपयोग करने ) की सिफारिश करने के लिए। यदि आप औचित्य प्रदान नहीं करेंगे, तो किसी को आपकी सलाह क्यों लेनी चाहिए? क्रिस्टोफ का जवाब इस संबंध में कहीं अधिक उपयोगी है।
मार्क अमेरी

+1 लेकिन फिल हामर और क्रिस्टोफ़ द्वारा नीचे दिए गए उत्तर भी देखें, वे इस मुद्दे को पूरी तरह से समझने के लिए आवश्यक पृष्ठभूमि जानकारी और विवरण जोड़ते हैं।
जॉन ज़ेड

असल में मैं दोनों के बीच एक अंतर उदाहरण के लिए, यदि आप नोटिस तो आप सिर्फ document.location साथ नहीं बल्कि विंडो स्थान के साथ ऐसा कर सकते हैं एक बच्चे फ्रेम से एक सैंडबॉक्स फ्रेम करने के लिए एक नेविगेशन क्या करना चाहते हैं
M.Abulsoud

207

वर्तमान स्थान ऑब्जेक्ट प्राप्त करने के लिए विहित तरीका है window.location( 1996 से इस MSDN पृष्ठ और 2006 से W3C ड्राफ्ट देखें )।

इसकी तुलना करें document.location, जो मूल रूप से वर्तमान URL को एक स्ट्रिंग के रूप में लौटाता है ( MSDN पर इस पृष्ठ को देखें )। संभवतः भ्रम से बचने के लिए, ( MSDN पर यहाँ देखें ) के document.locationसाथ प्रतिस्थापित किया गया था , जो DOM स्तर 1 का भी हिस्सा है ।document.URL

जहां तक ​​मुझे पता है, सभी आधुनिक ब्राउज़र मैप document.locationकरते हैं window.location, लेकिन मैं अभी भी पसंद window.locationकरता हूं कि मैंने अपने पहले DHTML को लिखने के बाद से इसका उपयोग किया है।


1
यदि आप उपयोग करते हैं window.location, तो यह सिर्फ उपयोग करने के लिए समान रूप से मान्य नहीं है location?
कॉमनपाइक

2
@commonpike यह है - एक स्क्रिप्ट के संदर्भ में [कम से कम] एक HTML दस्तावेज़, वैश्विक वस्तु जहां सभी परिभाषित चर गुण बन जाते हैं, वह windowवस्तु है। इस प्रकार, कोई भी चर या फ़ंक्शन जिसे आप अपनी स्क्रिप्ट के शीर्ष स्तर पर परिभाषित करते हैं, द्वारा संदर्भित ऑब्जेक्ट की एक संपत्ति है window, जो वैश्विक वस्तु होती है। अनुपस्थित होने पर वैश्विक वस्तु को निहित किया जाता है window.- इस प्रकार locationव्याख्या की जाती है window.locationif(an_undefined_variable)यदि चर को परिभाषित नहीं किया गया था - कैवेट - फ़े एक त्रुटि को फेंक if(window.an_undefined_variable)देगा - नहीं।
अं।

92

window.location सभी आज्ञाकारी ब्राउज़रों पर पढ़ा / लिखा जाता है।

document.location केवल इंटरनेट एक्सप्लोरर (कम से कम) में पढ़ा जाता है, लेकिन गेको-आधारित ब्राउज़र (फ़ायरफ़ॉक्स, सीमॉन्की) में पढ़ा / लिखा जाता है।


10
मैं document.locationकेवल IE में पढ़े गए दावे को पुन: पेश नहीं कर सकता । मैं IE 10, 9, 8 और 6 में इसे सफलतापूर्वक असाइन कर सकता हूं ( आधुनिक से वीएम का उपयोग करके )।
मार्क अमेरी

किसी भी टिप्पणी पर console.log(location);!!
Fr0zenFyr

44

document.locationमूल रूप से केवल-पढ़ने के लिए संपत्ति थी, हालांकि गेको ब्राउज़र आपको इसे भी असाइन करने की अनुमति देता है। क्रॉस-ब्राउज़र सुरक्षा के लिए, window.locationइसके बजाय उपयोग करें ।

अधिक पढ़ें:

document.location

window.location


जब उनमें से किसी का भी उपयोग करने के लिए मुझे कोई स्पष्ट उत्तर नहीं मिल रहा है, तो नीचे दिए गए मेरे उत्तर पर एक नज़र डालें
M.Abulsoud

37

दिलचस्प बात यह है कि अगर आपके पास 'लोकेशन' नाम का कोई फ्रेम, इमेज या फॉर्म है, तो 'document.location' लोकेशन ऑब्जेक्ट के बजाय क्रमशः फ्रेम विंडो, इमेज या फॉर्म का एक संदर्भ प्रदान करता है। जाहिरा तौर पर, यह इसलिए है क्योंकि document.forms, document.images, और window.frames संग्रह नाम लुकअप को मैपिंग से window.location पर प्राथमिकता मिलती है।

<img name='location' src='location.png'>

if (document.location.tagName == 'IMG') alert('Hello!')

2
कोई प्राथमिकता नहीं है, यह केवल ओवरराइट किया गया है
पेसियर

7
नहीं, यह अधिलेखित नहीं है। यह छाया हुआ है, इसलिए फिल संपत्ति समाधान के दौरान पूर्वता लेने वाले तत्व के बारे में सही है।
kangax

@kangax, लगता है जैसे तुम ठीक कह रहे: jsfiddle.net/uL4ysszr । लेकिन यह व्यवहार कितना विश्वसनीय है? क्या यह पर्याप्त रूप से क्रॉस-ब्राउज़र है?
पचेरियर

1
बस इस (अक्टूबर 2016) का परीक्षण किया। ऐसा नहीं है कि प्रतीत होता है window.locationऔर document.locationक्रोम या फ़ायरफ़ॉक्स में छाया नहीं किया जा सकता।
श्री ललमा

1
@ श्री ललाम आप सही कह रहे हैं। ऐसा प्रतीत होता है कि सभी आधुनिक ब्राउज़र अब मेरे द्वारा वर्णित तरीके से व्यवहार नहीं करते हैं। यह दस्तावेज़ देने के कारण प्रतीत होता है। "अनफ़ोरगेबल" विशेषता के कारण। प्रासंगिक क्रोमियम परिवर्तन: src.chromium.org/viewvc/blink?view=revision&revision=189862 और फ़ायरफ़ॉक्स बग: Bugzilla.mozilla.org/show_bug.cgi?id=1197760
फिल हैमर

27

जहां तक ​​मुझे पता है, दोनों एक ही हैं। क्रॉस ब्राउज़र सुरक्षा के लिए आप इसके window.locationबजाय उपयोग कर सकते हैं document.location

सभी आधुनिक ब्राउज़र मैप document.locationकरते हैं window.location, लेकिन मैं अभी भी पसंद window.locationकरता हूं कि मैंने अपना पहला वेब पेज लिखने के बाद से इसका उपयोग किया है। यह अधिक सुसंगत है।

आप document.location === window.locationरिटर्न भी देख सकते हैं true, जो स्पष्ट करता है कि दोनों समान हैं।


14

document.location === window.location रिटर्न true

भी

document.location.constructor === window.location.constructor है true

नोट: बस फ़ायरफ़ॉक्स 3.6, ओपेरा 10 और IE6 पर परीक्षण किया गया


1
@ स्पेसियर क्यों? वस्तुओं के लिए, ===और ==समतुल्य हैं।
मार्क अमेरी

4
@MarkAmery, यह गलत है और आसानी से प्रदर्शन किया जा सकता है: "abc" == new String("abc")रिटर्न trueजबकि "abc" === new String("abc")रिटर्न false
पचेरियर

7
@Pacerier ठीक है, मुझे बताएं कि थोड़ा और सख्ती से और कम अस्पष्ट: जब दो वस्तुओं की एक दूसरे के साथ तुलना (केवल किसी वस्तु के साथ एक वस्तु के बजाय), ==और ===समतुल्य हो। देखें कल्पना वर्गों 11.9.3 और 11.9.6। गैर-शून्य के लिए, गैर अपरिभाषित, गैर नंबर, गैर bool, एक ही प्रकार के साथ गैर स्ट्रिंग मूल्यों, ==व्यवहार 11.9.3 हिस्सा 1f, और से नियंत्रित होता है ===व्यवहार 11.9.6 भाग 7, जो हूबहू पढ़ द्वारा वापसी trueकरता है, तो x और y एक ही वस्तु को संदर्भित करते हैं। नहीं तो लौटो false
मार्क अमेरी

10
@ मार्की, कोई गारंटी नहीं है कि दोनों document.locationऔर window.locationवस्तुओं की ओर इशारा कर रहे हैं। आप ट्रिपल पॉइंट के पूरे बिंदु को याद कर रहे हैं; 2 बराबरी का उपयोग यह साबित नहीं करता है कि वे एक ही ओबज हैं। हमें 3 बराबरी का उपयोग करना चाहिए न कि 2 बराबरी का क्योंकि 2 बराबरी हमें एक झूठी सकारात्मक प्रदान करेगी। एक ब्राउज़र पर जिसके द्वारा document.location एक URL स्ट्रिंग के बराबर है window.location.toString(), फिर document.location==window.locationवह सही document.location===window.locationवापस आ जाएगा जबकि झूठी वापस आ जाएगी।
पचेरियर

@Pacerier अहा - मैं इसे पिछले पर मिलता है। आप काफी सही हैं, कम से कम जहां तक document.location === window.locationतुलना जाती है। तथ्य यह है कि .constructorतुलना बहुत अर्थ में फेंक दी गई है, मुझे लगता है, कि यह उत्तर अभी भी ध्वनि है, लेकिन इसका उपयोग ===तर्क को सरल करेगा।
मार्क अमेरी

11

हाँ, वे समान हैं। यह जेएस एपीआई ब्राउज़र में कई ऐतिहासिक quirks में से एक है। करने की कोशिश करो:

window.location === document.location

8

window.location पुराने ब्राउज़रों को देखते हुए दोनों के बीच अधिक मज़बूती से संगत है।


3

आजकल अंतर देखना दुर्लभ है क्योंकि html 5 अब फ्रेमसेट का समर्थन नहीं करता है। लेकिन उस समय जब हमारे पास फ्रेमसेट, डॉक्यूमेंट होता है। क्लोकेशन केवल उसी फ्रेम को रीडायरेक्ट करेगा, जिसमें कोड निष्पादित किया जा रहा है, और विंडो.लोकेशन पूरे पेज को रीडायरेक्ट करेगा।


2

मैं कहूंगा कि window.locationवर्तमान URL प्राप्त करने का अधिक विश्वसनीय तरीका है । निम्नलिखित में से एक के बीच का अंतर है window.locationऔर document.urlयह उस परिदृश्य में सामने आया जहां मैं URL में हैश मापदंडों को जोड़ रहा था और इसे बाद में पढ़ रहा था।

URL में हैश पैरामीटर जोड़ने के बाद।

पुराने ब्राउज़र में, मैं URL का उपयोग करके हैश पैरामीटर प्राप्त करने में सक्षम नहीं था document.url, लेकिन जब मैंने उपयोग कियाwindow.location तब मैं URL से हैश पैरामीटर प्राप्त करने में सक्षम था।

इसलिए इसका उपयोग करना हमेशा बेहतर होता है window.location


1
-1। प्रश्न का उल्लेख भी नहीं किया document.URLगया था - यह था window.locationऔर के बारे में document.location। इसके अलावा, document.urlइसका अस्तित्व नहीं है = यह अपरकेस होना चाहिए।
मार्क अमेरी

2

document.location.constructor === window.location.constructorहै true

ऐसा इसलिए है क्योंकि यह ठीक उसी वस्तु है जैसा आप देख सकते हैं document.location===window.location

इसलिए कंस्ट्रक्टर या किसी अन्य संपत्ति की तुलना करने की आवश्यकता नहीं है।


2

कम से कम IE में, यह स्थानीय फ़ाइल पर थोड़ा अंतर है:

document.URL "फ़ाइल: // C: \ प्रोजेक्ट \ abc \ a.html" वापस आ जाएगा

लेकिन window.location.href "फ़ाइल: /// C: /projects/abc/a.html" वापस आ जाएगी

एक वापस स्लैश है, एक आगे स्लैश है।


2

खैर, वे एक ही हैं, लेकिन ....!

window.location कुछ इंटरनेट एक्सप्लोरर ब्राउज़रों पर काम नहीं कर रहा है।


0

ज्यादातर लोग यहां सलाह देते हैं, इस तरह से Google Analytics का डायनामिक प्रोटोकॉल युगों से पहले जैसा दिखता था (इससे पहले कि वे ga.js से analytics.js में चले गए):

ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';

अधिक जानकारी: https://developers.google.com/analytics/devguides/collection/gajs/

नए संस्करण में उन्होंने '//' का उपयोग किया है इसलिए ब्राउज़र अपने आप प्रोटोकॉल जोड़ सकता है:

'//www.google-analytics.com/analytics.js'

तो अगर Google डॉक्यूमेंट को पसंद करता हैwindow.location जब वे जे एस में प्रोटोकॉल की जरूरत है, मैं वे उस के लिए कुछ कारणों लगता है।

OVERALL : मेरा व्यक्तिगत रूप से यही मानना ​​है document.locationऔर window.locationये समान हैं, लेकिन अगर Google में दस्तावेज़ों का उपयोग करके ब्राउज़रों के उपयोग के बारे में सबसे बड़े आँकड़े हैं , तो मैं उनका अनुसरण करने की सलाह देता हूं।


2
हालांकि, मैं इसे कम नहीं कर पाया, क्योंकि यह वास्तव में एक पुराना सवाल है और आपका जवाब ऐसा कोई नया या मूल्यवान साक्ष्य नहीं प्रदान करता है जो एक दूसरे से बेहतर हो। या, यह इसलिए हो सकता है क्योंकि आपका उत्तर सार्वजनिक राय के विपरीत सुझाव देता है, भले ही आपके द्वारा Google को ऐतिहासिक रूप से दी गई योग्यता के बावजूद। या, यह हो सकता है कि डाउनवॉटर को यह पसंद नहीं आया कि आप अपने उत्तर के उन हिस्सों पर कैसे जोर दें, जिन्हें वास्तव में जोर देने की आवश्यकता नहीं है। वास्तव में कुछ भी हो सकता है। यही कारण है कि एसओ पर अनाम मतदान की सुंदरता है।
एम। बाबॉक

0

वास्तव में मैं दोनों के बीच क्रोम में अंतर देखता हूं, उदाहरण के लिए यदि आप चाइल्ड फ्रेम से सैंडबॉक्स वाले फ्रेम में नेविगेशन करना चाहते हैं तो आप यह सिर्फ डॉक्यूमेंट के साथ कर सकते हैं।

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