2009-06-05 14 views
30

पर विचार करें निम्नलिखित जावास्क्रिप्ट:जावास्क्रिप्ट। Pathname आईई quirk?

var anchors = document.getElementsByTagName('a'); 
for(var i=0; i < anchors.length; i++) 
{ 
    alert(a.pathname); 
} 

जब मैं एक पृष्ठ है कि प्रारूप "http://foo.com/bar" में लिंक शामिल हैं पर इस चलाने के लिए, IE8 में मैं वापस एक स्ट्रिंग है "बार" की तरह लग रहा मिलता है। सफारी में, क्रोम, फ़ायरफ़ॉक्स, मुझे कुछ "/ बार" जैसे वापस मिलता है (अग्रणी आगे स्लैश नोट करें)।

क्या आईई यहां गलती है, सौदा क्या है?

+3

http://blogs.msdn.com/b/ieinternals/archive/2011/02/28/internet-explorer-window-location-pathname-missing-slash-and-host-has-port.aspx – EricLaw

उत्तर

27

W3C standard on the window object - स्थान इंटरफ़ेस समेत - 07 अप्रैल 2006 दिनांकित है, यानी वास्तविक कार्यान्वयन के वर्षों के बाद यह निर्दिष्ट किया गया था।

मानक पढ़ता है:

पथ नाम

यह विशेषता स्थान के यूआरआई के पथ घटक मेजबान और बंदरगाह के लिए और पहले प्रश्न चिह्न (छोड़कर अप के बाद सब कुछ के होते हैं जो का प्रतिनिधित्व करता है?) या हैश चिह्न (#)।

इसका मतलब है कि अग्रणी स्लैश शामिल होना चाहिए, जो Mozilla's implementation के साथ संगत है।

MSDN doc on the location object में संपत्ति का क्या उल्लेख नहीं है, लेकिन page on the VBScript location object में आपकी खोज के साथ एक उदाहरण है।

जैसा कि कहा गया पृष्ठ है © 1996 - डब्ल्यू 3 सी शामिल होने से दस साल पहले - यह कहना मुश्किल नहीं है कि आईई गलती है, लेकिन मैं अब भी इसे एक बग मानता हूं।

17

इस व्यवहार के बारे में अजीब बात यह है कि window.location.pathname आईई के सभी संस्करणों में अग्रणी स्लैश (मेजबाननाम के बाद) को अन्य सभी ब्राउज़रों के समान देता है।

यह केवल हाइपरलिंक ('तत्व') का स्थान वस्तु है जो आईई (और ओपेरा में भी स्लैश के बिना पथ लौटाता है)।

+1

ओपेरा में अब 10.x के रूप में अग्रणी स्लैश शामिल है। –

-1

अगर आप इसे दूर करने का आसान तरीका ढूंढ रहे हैं तो getAttribute का उपयोग करें।

देखें: Spec, MDN

उदाहरण

HTML:

<a href="/foo" id="foo"> 

जे एस:

document.getElementById("foo").getAttribute("href"); 

यह रूप में अच्छी तरह अग्रणी स्लैश वापस आ जाएगी ("/ foo ")। और यह उन सभी ब्राउज़रों पर समर्थित है जिनके पास डोम-लेवल -2 सही ढंग से कार्यान्वित किया गया है।

+1

प्रश्न यह है कि सभी ब्राउज़र के लिए लगातार एक यूआरएल "http://foo.com/bar" से ** पथनाम ** कैसे प्राप्त करें। – sincospi

+0

ओह मुझे पूरी तरह याद आया। – shem86

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