location.host बनाम location.hostname और क्रॉस-ब्राउज़र संगतता?


365

इनमें से कौन सा सबसे प्रभावी बनाम जाँच है अगर उपयोगकर्ता एजेंट सही डोमेन के माध्यम से पहुंच रहा है।

यदि वे किसी प्रकार के वेब प्रॉक्सी का उपयोग करके डोमेन तक पहुंच रहे हैं (जैसा कि यह js को तोड़ने के लिए जाता है) तो हम एक छोटे से js आधारित 'टॉप बार' शैली की चेतावनी दिखाना चाहते हैं।

हम निम्नलिखित का उपयोग करने के बारे में सोच रहे थे:

var r = /.*domain\.com$/;
if (r.test(location.hostname)) {
    // showMessage ...
}

हम कभी भी उपयोग करने वाले किसी भी उप डोमेन का ख्याल रखेंगे।

हमें होस्ट या होस्टनाम का उपयोग करना चाहिए?

फ़ायरफ़ॉक्स 5 और क्रोम 12 में:

console.log(location.host);
console.log(location.hostname);

.. दोनों के लिए समान दिखाता है।

क्या इसलिए कि पोर्ट वास्तव में एड्रेस बार में नहीं है?

W3Schools का कहना है कि मेजबान में पोर्ट होता है।

क्या स्थान.होस्ट /होस्टनेम को मान्य किया जाना चाहिए या क्या हम IE6 + और अन्य सभी में मौजूद होंगे?


6
ध्यान देने वाली एक बात यह है कि google chrome में एक location.origin है, जहाँ MSIE और Firefox नहीं है। developer.mozilla.org/En/Window.location - msdn.microsoft.com/en-us/library/ms952653.aspx
Keyo


जवाबों:


1063

इंटरैक्टिव लिंक शारीरिक रचना

एक छोटे ज्ञापन के रूप में: इंटरैक्टिव लिंक शरीर रचना

-

संक्षेप में (एक स्थान मानकर http://example.org:8888/foo/bar#bang):

  • hostname आपको देता है example.org
  • host आपको देता है example.org:8888

87
एक तस्वीर एक हजार शब्दों के बराबर होती है।
जैक गिफिन

4
@lolzerywowzery ... लेकिन चित्र का वर्णन करने के लिए केवल उन हज़ार शब्दों की आवश्यकता है
Agi Hammerthief

1
En.wikipedia.org/wiki/… के अनुसार , बंदरगाह को मेजबान का हिस्सा नहीं माना जाना चाहिए (लेकिन यह प्राधिकरण का एक हिस्सा है)।
एलेक

@ एलेक यह एक दिलचस्प तकनीकी नोट है; विकिपीडिया प्रशस्ति के नीचे ड्रिलिंग से पता चलता है कि, RFC 3986 के अनुसार, "प्राधिकारी" को होस्टनाम :, और पोर्ट के संघटन के लिए शब्द होना चाहिए । मुझे आश्चर्य है कि जब चर्चा की location.hostजा रही थी , तब से कितनी चर्चा अभी भी उपलब्ध है ... मुझे संदेह है कि इसका नाम आज है क्योंकि किसी ने भी उस आरएफसी का उल्लेख करने के लिए पढ़ा या सोचा नहीं था।
जेम्स दिवाज डेड

सरल समाधान के लिए बहुत बहुत धन्यवाद
तरुण नागपाल

70

होस्ट में पोर्ट नंबर शामिल है यदि कोई निर्दिष्ट है। यदि विशेष रूप से URL में कोई पोर्ट संख्या नहीं है, तो यह hostname के समान ही देता है। आप चुनते हैं कि आप पोर्ट नंबर से मेल खाते हैं या नहीं। अधिक जानकारी के लिए https://developer.mozilla.org/en/window.location देखें ।

मुझे लगता है कि आप hostname चाहते हैं कि सिर्फ साइट का नाम मिल जाए।


33

यदि आप उपयोग करने के लिए जोर दे रहे हैं तो window.location.origin आप पढ़ने से पहले इसे अपने कोड के ऊपर रख सकते हैंorigin

if (!window.location.origin) {
  window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
}

समाधान

पुनश्च: रिकॉर्ड के लिए, यह वास्तव में मूल प्रश्न था। इसे पहले ही संपादित किया गया था :)


5
लेकिन .... ओपी ने कभी भी window.location.originउनके प्रश्न का उल्लेख नहीं किया । उनका सवाल वास्तव में विशेष रूप से उन चीजों के बारे में था जो नहीं हैं window.location.origin
19

1
यह भी ध्यान देने योग्य है कि window.location.origin में ब्राउज़र संगतता समस्याएं हैं। developer.mozilla.org/en-US/docs/Web/API/Window/…
स्कॉट

10

आपके प्राथमिक प्रश्न का उत्तर दिया जा चुका है। मैं केवल यह बताना चाहता था कि आपके द्वारा उपयोग किए जा रहे रेगेक्स में बग है। यह उस पर भी सफल होगा, foo-domain.comजिसके उप-समूह नहीं हैंdomain.com

आप वास्तव में क्या चाहते हैं:

/(^|\.)domain\.com$/


0

बस एक नोट जोड़ने के लिए कि Google Chrome ब्राउज़र में स्थान के लिए मूल विशेषता है। जो आपको नीचे स्क्रीनशॉट में दिखाए अनुसार प्रोटोकॉल से लेकर पोर्ट नंबर तक का संपूर्ण डोमेन देता है। क्रोम डेवलपर्स उपकरण

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