जावास्क्रिप्ट के साथ वर्तमान डोमेन नाम प्राप्त करें (पथ नहीं, आदि)


246

मैं एक ही साइट के लिए दो डोमेन नाम खरीदने की योजना बना रहा हूं। किस डोमेन का उपयोग किया जाता है इसके आधार पर मैं पृष्ठ पर थोड़ा अलग डेटा प्रदान करने की योजना बना रहा हूं। क्या मेरे लिए वास्तविक डोमेन नाम का पता लगाने का कोई तरीका है जिससे पृष्ठ लोड हो रहा है ताकि मुझे पता चल सके कि मेरी सामग्री को किसमें बदलना है?

मैंने इस तरह से सामान के लिए चारों ओर देखा है, लेकिन इसमें से अधिकांश उस तरह से काम नहीं करता जैसा मैं चाहता हूं।

उपयोग करते समय उदाहरण के लिए

document.write(document.location)

JSFiddle पर यह वापस आता है

http://fiddle.jshell.net/_display/

अर्थात वास्तविक मार्ग या जो कुछ भी है।


1
मुझे यकीन नहीं है कि अगर मैं ठीक-ठीक समझ पाऊं कि आप क्या करना चाहते हैं, लेकिन आपको शायद एमडीएन में इस संबंध में एक नज़र डालनी चाहिए
मिल्कीवेय जॉय

थोड़ा सा विषय, लेकिन आप उप डोमेन को फिर दो अलग डोमेन नामों पर विचार कर सकते हैं। कुछ इस तरह premium.random.comऔरfree.random.com
T.Cmemelevskij

जवाबों:


456

कैसा रहेगा:

window.location.hostname

locationवस्तु वास्तव में एक है विशेषताओं की संख्या यूआरएल के विभिन्न भागों की चर्चा करते हुए


55
और window.location.hostnameयदि आप port(जैसे http://localhost:3000/, window.location.host = 'localhost:3000'औरwindow.location.hostname = 'localhost'
गिलहर्मे

6
उत्तर गलत है क्योंकि पोर्ट डोमेन से संबंधित नहीं है। और window.location.hostकभी-कभी पोर्ट वापस दे देंगे।
Andrej

4
यह भी (, 'www.amazingjokes.com' सिर्फ '.amazingjokes.com' के बजाय) सर्वर नाम देता है
पैट्रिक

यदि आपके पास DNS अग्रेषित करने के लिए आपको इसकी आवश्यकता हो सकती है - window.location.ancestorOrigins
Kirill Gusyatin

126

स्क्रिप्ट में चलने का प्रयास करें: पथ: http: // localhost: 4200 / लैंडिंग? क्वेरी = 1 # 2

console.log(window.location.hash)

स्थान के निम्नलिखित मूल्य हैं:

window.location.hash: "#2"

window.location.host: "localhost:4200"

window.location.hostname: "localhost"

window.location.href: "http://localhost:4200/landing?query=1#2"

window.location.origin: "http://localhost:4200"

window.location.pathname: "/landing"

window.location.port: "4200"

window.location.protocol: "http:"

window.location.search: "?query=1"

3
यह इतना बड़ा जवाब है!
एंड्रयू कैंपबेल

2
मुझे कई उदाहरणों के साथ जवाब पसंद हैं। बहुत बहुत धन्यवाद।
मैग्नो अल्बर्टो

24

यदि आप होस्ट नाम (उदाहरण के लिए www.beta.example.com) में रुचि नहीं रखते हैं, लेकिन डोमेन नाम (उदाहरण के लिए example.com), तो यह मान्य होस्ट नामों के लिए काम करता है:

function getDomainName(hostName)
{
    return hostName.substring(hostName.lastIndexOf(".", hostName.lastIndexOf(".") - 1) + 1);
}

13
गलत, यह लगभग सभी अंतर्राष्ट्रीय TLD पर टूट जाएगा।
tbranyen

4
@tbranyen क्या आप बता सकते हैं कि आप क्या जिक्र कर रहे हैं? एक ही मामला है जिसके बारे में मैं सोच सकता हूँ जैसे उप डोमेन हैं amazon.co.uk। लेकिन निश्चित रूप से "लगभग सभी अंतर्राष्ट्रीय टीएलडी" नहीं। वास्तव में यह विकिपीडिया में पाए गए
cprcrack

1
Cprcrack किसी कारण से मैंने सोचा कि अधिक अंतरराष्ट्रीय (अमेरिका) के लिए कई डॉट्स निहित थे। सही करने के लिए धन्यवाद!
tbranyen

कई देश यूके के समान काम करते हैं: उन्होंने दूसरे स्तर के डोमेन तय किए हैं और आप केवल तीसरे स्तर पर डोमेन पंजीकृत कर सकते हैं। उन देशों की एक सूची विकिपीडिया पर है
गारेथ

18
function getDomain(url, subdomain) {
    subdomain = subdomain || false;

    url = url.replace(/(https?:\/\/)?(www.)?/i, '');

    if (!subdomain) {
        url = url.split('.');

        url = url.slice(url.length - 2).join('.');
    }

    if (url.indexOf('/') !== -1) {
        return url.split('/')[0];
    }

    return url;
}

उदाहरण

पिछला संस्करण पूर्ण डोमेन (उप-डोमेन सहित) प्राप्त कर रहा था। अब यह वरीयता के आधार पर सही डोमेन निर्धारित करता है। ताकि जब एक 2 तर्क को सत्य के रूप में प्रदान किया जाए तो इसमें उपडोमेन शामिल होगा, अन्यथा यह केवल 'मुख्य डोमेन' लौटाता है


1
यह उत्तर होना चाहिए, यह localhost/test.phpसही उत्तर में भी काम करता है localhost
मोहम्मद अलबाना

यह सबसे अच्छा उत्तर भी है क्योंकि यह आपके द्वारा पास किए गए किसी भी URL के साथ काम करता है, न कि केवल वर्तमान window.location
sohtimsso1970

यदि आप ऐसा करते हैं google.co.ukतो आपको 'co.uk' वापस मिल जाएगी, जो सही नहीं है ...
जेम्स डगलस

हाँ। यह एक मुश्किल व्यवसाय है। यहां तक ​​कि अगर आपको उप-डोमेन भी मिला तो ट्रिकियर (जैसे: test.google.co.uk)। यदि आप इस कच्चे संस्करण का उपयोग करना चाहते हैं, तो कुछ गंभीर समायोजन की आवश्यकता है (शायद उन टौर के लिए एक विशेष सूची को जोड़ना)।
एडलीनू

10

आप इसे जावास्क्रिप्ट में स्थान ऑब्जेक्ट से आसानी से प्राप्त कर सकते हैं:

उदाहरण के लिए इस पृष्ठ का URL है:

http://www.stackoverflow.com/questions/11401897/get-the-current-domain-name-with-javascript-not-the-path-etc

तब हमें स्थान ऑब्जेक्ट के निम्नलिखित गुणों के साथ सटीक डोमेन मिल सकता है:

location.host = "www.stackoverflow.com"
location.protocol= "http:"

आप पूरा डोमेन बना सकते हैं:

location.protocol + "//" + location.host

इस उदाहरण में कौन सा रिटर्न http://www.stackoverflow.com

इसके अतिरिक्त हम स्थान ऑब्जेक्ट के अन्य गुणों के साथ पूर्ण URL और पथ पा सकते हैं:

location.href= "http://www.stackoverflow.com/questions/11401897/get-the-current-domain-name-with-javascript-not-the-path-etc"    
location.pathname= "questions/11401897/get-the-current-domain-name-with-javascript-not-the-path-etc"

7

यदि आप केवल डोमेन नाम में रुचि रखते हैं और उपडोमेन को अनदेखा करना चाहते हैं, तो आपको इसे hostऔर बाहर पार्स करने की आवश्यकता है hostname

निम्न कोड ऐसा करता है:

var firstDot = window.location.hostname.indexOf('.');
var tld = ".net";
var isSubdomain = firstDot < window.location.hostname.indexOf(tld);
var domain;

if (isSubdomain) {
    domain = window.location.hostname.substring(firstDot == -1 ? 0 : firstDot + 1);
}
else {
  domain = window.location.hostname;
}

http://jsfiddle.net/5U366/4/


यह jsField के बजाय jShell क्यों लौटाता है?
फ़्रीस्नोव

2
@XanderLamkins: इसका एक iframe: jsfiddle.net/5U366 <-> fiddle.jshell.net/5U366/show
19-13 को Saxoier

7

चूंकि यह प्रश्न डोमेन नाम के लिए कहता है, न कि होस्ट नाम के लिए, एक सही उत्तर होना चाहिए

window.location.hostname.split('.').slice(-2).join('.')

यह www.example.com जैसे होस्ट नामों के लिए भी काम करता है।


1
यह काम करता है लेकिन डोमेन के साथ काम नहीं करता है जैसे domain.co.uk, domain.com.br .. मैं इसे किसी भी डोमेन के साथ कैसे काम कर सकता हूं?
Sameh

6

उपयोग

document.write(document.location.hostname)​

window.locationगुणों का एक समूह है। उनकी सूची के लिए यहां देखें ।


5

यदि आप एक पूर्ण डोमेन मूल चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

document.location.origin

और यदि आप केवल डोमेन प्राप्त करना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

document.location.hostname

लेकिन आपके पास अन्य विकल्प हैं, में गुणों पर एक नज़र डालें:

document.location

5

इस समारोह के बारे में क्या?

window.location.hostname.match(/\w*\.\w*$/gi)[0]

यह केवल डोमेन नाम से मेल खाएगा भले ही इसका उपडोमेन या मुख्य डोमेन हो


1
मुझे यह उत्तर पसंद है। लेकिन आपको इस बात की जानकारी होनी चाहिए कि यदि सुरक्षा-संबंधी उद्देश्यों के लिए इसका उपयोग किया जाता है .. तो इसे बायपास किया जा सकता है। यानी यदि आप यह सुनिश्चित करना चाहते हैं कि आप example.com पर हैं, तो hacker-example.com भी 'example.com' के बराबर होगा। window.location.hostname.match (/ [a-zA-Z0-9 -] * \ _। [a-zA-Z0-9 -] * $ /) [0] काम करता है।
हिबर्न 8

4

यदि आप जावास्क्रिप्ट में डोमेन नाम प्राप्त करना चाहते हैं, तो बस निम्नलिखित कोड का उपयोग करें:

var domain_name = document.location.hostname;
alert(domain_name);

यदि आपको वेब पेज URL पथ की आवश्यकता है तो आप इस उदाहरण का उपयोग करके वेब URL पथ तक पहुँच सकते हैं:

var url = document.URL;
alert(url);


1

मैं जावास्क्रिप्ट के लिए नया हूँ, लेकिन आप अभी उपयोग नहीं कर सकते: document.domain ?

उदाहरण:

<p id="ourdomain"></p>

<script>
var domainstring = document.domain;
document.getElementById("ourdomain").innerHTML = (domainstring);
</script>

आउटपुट:

domain.com

या

www.domain.com

आप अपनी वेबसाइट पर क्या उपयोग करते हैं इसके आधार पर।



0

उपरोक्त में से कुछ उत्तरों को जोड़ते हुए, कुकीज़ को नष्ट करने के लिए निम्नलिखित मेरे लिए वास्तव में अच्छी तरह से काम करता है:

  /**
   * Utility method to obtain the domain URI:
   */
  fetchDomainURI() {
    if (window.location.port.length > 0) {
      return window.location.hostname;
    }
    return `.${window.location.hostname.match(/\w*\.\w*$/gi)[0]}`;
  }

बंदरगाहों के साथ आईपी पते के लिए काम करता है, उदाहरण के लिए, 0.0.0.0:8000 आदि, साथ ही जटिल डोमेन जैसे app.staging.example.comरिटर्निंग .example.com=> क्रॉस-डोमेन कुकी सेटिंग और नष्ट करने की अनुमति देता है।


0

यदि आप देश डोमेन नाम चाहते हैं - उदाहरण के लिए  .com   से stackoverflow.com:

(ES6):

const getCountryDomainName = () => {
  let hostName = window.location.hostname;
  let lastDotIndex = hostName.lastIndexOf('.');
  let countryDomainName = hostName.substr(lastDotIndex+1, hostName.length);
  return countryDomainName;
}

(ES5):

function getCountryDomainName() {
  let hostName = window.location.hostname;
  let lastDotIndex = hostName.lastIndexOf('.');
  let countryDomainName = hostName.substr(lastDotIndex+1, hostName.length);
  return countryDomainName;
}

फिर, मान को var पर असाइन करने के लिए फ़ंक्शन का उपयोग करें:

const countryDomainName = getCountryDomainName();

-2

@Brandito धन्यवाद, अच्छी तरह से उस साइट को AWS वर्चुअल होस्ट में होस्ट किया गया था, जिसका मानना ​​है कि मैं वर्डप्रेस का उपयोग कर रहा हूं और यह नहीं जानता कि यह इसे इस तरह से करने के लिए समस्याएं क्यों दे रहा था ... यकीन नहीं होता कि यह गलत पुनर्निर्देशन था या इसके लिए कुछ करना था बैकएंड मॉड के साथ नियमों को फिर से लिखना .. प्लस मैं इसके साथ एक jquery यूआई थीम्ड टूलिप और आइकन का उपयोग करना चाहता था। पहले ग्राहक द्वारा अनुमोदित: '-)
जीन पॉल AKA el_vete
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.