जावास्क्रिप्ट में किसी URL के होस्टनाम हिस्से को कैसे निकालें


379

क्या एक पूर्ण URL से शुरू करने का वास्तव में आसान तरीका है:

document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah"

और सिर्फ मेजबान भाग निकालें:

aaa.bbb.ccc.com

कोई जावास्क्रिप्ट फ़ंक्शन होगा जो इसे मज़बूती से करता है, लेकिन मैं इसे नहीं ढूंढ सकता।

जवाबों:


826

मान लीजिए कि आपके पास इस पते वाला एक पृष्ठ है http://sub.domain.com/virtualPath/page.htm:। उन परिणामों को प्राप्त करने के लिए पृष्ठ कोड में निम्नलिखित का उपयोग करें:

  • window.location.host: आपको मिलेगा sub.domain.com:8080याsub.domain.com:80
  • window.location.hostname : आपको मिलेगा sub.domain.com
  • window.location.protocol : आपको मिलेगा http:
  • window.location.port: आपको मिलेगा 8080या80
  • window.location.pathname : आपको मिलेगा /virtualPath
  • window.location.origin: आप http://sub.domain.com***** प्राप्त करेंगे

अपडेट: .origin के बारे में

***** जैसा कि रेफ बताता है, के लिए ब्राउज़र संगतता window.location.originस्पष्ट नहीं है। मैंने इसे क्रोम में जांचा है और http://sub.domain.com:portअगर पोर्ट कुछ भी हो, लेकिन 80 और http://sub.domain.comअगर पोर्ट 80 है तो यह वापस आ गया ।

मेरा उल्लेख करने के लिए @torazaburo को विशेष धन्यवाद।


मेरे पास एक वेब साइट है और IIS में 2 एप्लिकेशन हैं। जैसे: sub.domain.com/v1 और sub.domain.com/v2 और sub.domain.com/v1/Default.aspx या sub.domain.com/v2/Products/Default.aspx , इत्यादि जैसे पृष्ठ । मूल्य प्राप्त कर सकते हैं / v2 , मेरे आवेदन के लिए रूट sub.domain.com/v2 ?
किकेनेट

@Kiquenet WebStorm की तरह एक जावास्क्रिप्ट आईडीई का उपयोग करते हैं, कोड लिखते ही आपको संभावित विकल्प देखने को मिलते हैं।
भार्गव नानकेलावा

3
window.location.originIE9 में अपरिभाषित है (लिंक के अनुसार, यह IE11 + है)। इस जवाब ने मदद की।
नियोलिस्क

1
लगभग सभी के लिए स्पष्ट रूप से उपयोगी है, सिवाय इसके कि इस सवाल का जवाब नहीं है कि URL से होस्ट भाग को कैसे निकाला जाए। GetRootUrl फ़ंक्शन के साथ मज़ेदार सही उत्तर में केवल 17 बनाम 609 वोट हैं।
मिरो

@ सवाल का जवाब दिया है यह नहीं है, 2 गोली बिंदु सवाल का जवाब देता है: window.location.hostname: आप सब मिल जाएगा sub.domain.com
पॉल

155

आप स्थान प्रोटोकॉल और होस्ट को संक्षिप्त कर सकते हैं:

var root = location.protocol + '//' + location.host;

एक url के लिए, कहने दो 'http://stackoverflow.com/questions', यह वापस आ जाएगा'http://stackoverflow.com'


5
ऐसा लगता है कि आपको उपरोक्त परिणामों को प्राप्त करने के लिए "होस्ट" के बजाय "होस्टनाम" का उपयोग करना चाहिए। स्रोत: stackoverflow.com/questions/6725890/…
user417669

आप समान परिणाम के साथ location.origin का उपयोग कर सकते हैं।
सेरियो

1
मूल प्रश्न URL के प्रोटोकॉल भाग के लिए नहीं पूछा गया था।
साइमन ईस्ट

36

document.locationवस्तु और उसके hostया hostnameगुणों का उपयोग करें ।

alert(document.location.hostname); // alerts "stackoverflow.com"

29

स्वीकार किए गए उत्तर ने मेरे लिए काम नहीं किया क्योंकि मैं किसी भी मध्यस्थ यूआरएल के साथ काम करना चाहता था, न कि केवल वर्तमान पृष्ठ URL।

URLऑब्जेक्ट पर एक नज़र डालें :

var url = new URL("http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah");
url.protocol;  // "http:"
url.hostname;  // "aaa.bbb.ccc.com"
url.pathname;  // "/asdf/asdf/sadf.aspx"
url.search;    // "?blah"

1
धन्यवाद। घंटे के लिए मैं विधि से उर निकालने के लिए खोज रहा हूँ जो मैं एपीआई से प्राप्त कर रहा हूँ। यह बहुत सरल था। मैंने इसे केवल नए URL के साथ url में पढ़ा था। धन्यवाद।
नादिराबेगमिक्सेनोयिम

1
+99999999999999
ADJenks

यहाँ दो जवाबों में से एक है जो यह नहीं मानते हैं कि आप चीजों के ब्राउज़र की तरफ हैं ...
Will59

IE11 पर काम नहीं करता है :(
Teoman shipahi

24

इसके दो तरीके हैं। पहला यहां दूसरे उत्तर का एक प्रकार है, लेकिन यह एक गैर-डिफ़ॉल्ट पोर्ट के लिए खाता है:

function getRootUrl() {
  var defaultPorts = {"http:":80,"https:":443};

  return window.location.protocol + "//" + window.location.hostname
   + (((window.location.port)
    && (window.location.port != defaultPorts[window.location.protocol]))
    ? (":"+window.location.port) : "");
}

लेकिन मुझे यह सरल विधि पसंद है (जो किसी भी यूआरआई स्ट्रिंग के साथ काम करता है):

function getRootUrl(url) {
  return url.toString().replace(/^(.*\/\/[^\/?#]*).*$/,"$1");
}

3
धन्यवाद! मुझे दूसरी विधि भी बेहतर लगती है! खासकर जब सर्वर साइड जावास्क्रिप्ट पर, window.location पाने का कोई तरीका नहीं :)
ट्रिलियन

यहाँ दो उत्तरों में से एक है जो यह नहीं मानते हैं कि आप चीजों के ब्राउज़र की तरफ हैं ... लेकिन नए URL का उपयोग करके मार्टिन कोंसेनी के हाल के एक की जाँच करें।
Will59



3

एक और हैक है जिसका मैं उपयोग करता हूं और किसी भी StackOverflow प्रतिक्रिया में कभी नहीं देखा गया है: एक छवि के "src" विशेषता का उपयोग करने से आपकी साइट का पूरा आधार पथ प्राप्त होगा। उदाहरण के लिए :

var dummy = new Image;
dummy.src = '$';                  // using '' will fail on some browsers
var root = dummy.src.slice(0,-1); // remove trailing '$'

जैसे URL पर http://domain.com/somesite/index.html, पर rootसेट किया जाएगाhttp://domain.com/somesite/ । यह लोकलहोस्ट या किसी मान्य आधार URL के लिए भी काम करता है।

ध्यान दें कि यह एक विफल HTTP अनुरोध का कारण होगा $ डमी छवि । आप इससे बचने के लिए मौजूदा छवि का उपयोग कर सकते हैं, केवल मामूली कोड परिवर्तन के साथ।

एक अन्य संस्करण डमी लिंक का उपयोग करता है, जिसमें HTTP अनुरोधों पर कोई दुष्प्रभाव नहीं है:

var dummy = document.createElement ('a');
dummy.href = '';
var root = dummy.href;

मैंने हर ब्राउज़र पर इसका परीक्षण नहीं किया था।


3

इसे देखो:

alert(window.location.hostname);

इस के रूप में मेजबान नाम वापस आ जाएगा www.domain.com

तथा:

window.location.host

पोर्ट की तरह डोमेन नाम लौटाएगा www.example.com:80

पूर्ण संदर्भ के लिए मोज़िला डेवलपर साइट देखें।


2

मैं कुछ बताना चाहूंगा। अगर किसी को रास्ते के साथ पूरे url को प्राप्त करना है, जैसे मुझे ज़रूरत है, उपयोग कर सकते हैं:

var fullUrl = window.location.protocol + "//" + window.location.hostname + window.location.pathname;

लंबा रास्ता क्यों इसे var fullUrl = window.location.origin + window.location.pathname
Anant

लेकिन कभी-कभी आप प्रोटोकॉल और होस्टनाम जैसे बहुभाषी आदि के बीच सबडोमेन जैसे कुछ जोड़ना चाहते हैं
crx4

2

मुझे पता है कि यह थोड़ा देर से है, लेकिन मैंने थोड़ा सा ES6 सिंटैक्स के साथ एक छोटा सा फ़ंक्शन किया

function getHost(href){
  return Object.assign(document.createElement('a'), { href }).host;
}

यह ES5 की तरह भी रिटेन किया जा सकता है

function getHost(href){
  return Object.assign(document.createElement('a'), { href: href }).host;
}

बेशक IE का समर्थन नहीं है Object.assign, लेकिन मेरे काम की लाइन में, इससे कोई फर्क नहीं पड़ता।


1

रेगेक्स बहुत अधिक लचीलापन प्रदान करता है।

    //document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah
    //1.
     var r = new RegExp(/http:\/\/[^/]+/);
     var match = r.exec(document.location.href) //gives http://aaa.bbb.ccc.com

    //2. 
     var r = new RegExp(/http:\/\/[^/]+\/[^/]+/);
     var match = r.exec(document.location.href) //gives http://aaa.bbb.ccc.com/asdf
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.