2011-01-05 11 views
9

क्याजावास्क्रिप्ट में डोमेन नाम निर्धारित करें?

if (document.domain.toLowerCase().indexOf("domainName") != -1) 

और

if(window.location.href.match(/:\/\/(.[^/]+)/)[1].toLowerCase().indexOf("domainName") != -1) 

और

if(window.location.hostname.toLowerCase().indexOf("domainName") != -1) 

मैं सिर्फ एक निश्चित domainname पर मैच के लिए कोशिश कर रहा हूँ और सबसे अच्छा तरीका उपयोग करना चाहते हैं का उपयोग कर के बीच अंतर है।

+1

मैं एक है कि कोड की कम मात्रा लेता कहेंगे (1) सबसे अच्छा है, लेकिन मुझे तीनों में से किसी के साथ कोई अनुभव नहीं है ... वैसे भी इस पर भरोसा नहीं करते हैं, specia अगर आप सुरक्षा से संबंधित कुछ की जांच कर रहे हैं तो एक हमलावर इसे बहुत आसान – JCOC611

+1

बाईपास कर सकता है, वैसे, आपका उदाहरण कभी काम नहीं करेगा। आप LowerCase() पर कॉल कर रहे हैं और फिर आप उस चीज़ की तुलना कर रहे हैं जिसमें ऊपरी केस 'एन' है।:) –

+0

आह हाँ अच्छा कॉल, मैं "डोमेन नाम" के साथ वास्तविक डोमेन नाम को प्रतिस्थापित कर रहा था। लेकिन हाँ मैंने उस स्ट्रिंग में सभी लोअरकेस का उपयोग किया है जिस पर मैं मिलान कर रहा हूं। – Shafique

उत्तर

31

बेस्ट और सबसे पढ़े जा सकेंगे:

if(location.hostname == "mysite.com"){ 

} 

अद्यतन:

या के रूप में पैट्रिक ने कहा कि यदि आप केवल डोमेन नाम के हिस्से के लिए देख रहे हैं मैं match का प्रयोग करेंगे।

if(location.hostname.match('mysite')){} // will return null if no match is found 
+0

यदि स्थान.hostname आपको होस्टनाम देता है, तो कोई भी इसे प्राप्त करने के लिए एक reg exp क्यों बनाएगा? –

+0

केवल एक चीज यह है कि यह ओपी के कोड के समान काम नहीं करता है। हम नहीं जानते कि एक सटीक मैच वांछित है या नहीं। – user113716

+1

अच्छी कॉल, मैंने अपडेट किया। –

1

पहला और तीसरा सरल और त्वरित होना चाहिए। दोनों में से, मुझे नहीं लगता कि यह वास्तव में पर महत्वपूर्ण है जब तक आप केवल डोमेन का परीक्षण कर रहे हों।

यदि आप उप-डोमेन का परीक्षण कर रहे हैं, तो मान लें कि document.domain जावास्क्रिप्ट में संशोधित किया गया है, जबकि window.location.hostname नहीं कर सकता।

1

अच्छा, window.location अधिक मानक तरीका है, इसलिए मैं सुझाव दूंगा कि document.domain से अधिक। इंडेक्सऑफ सबस्ट्रिंग से मेल खाएगा, जो शायद आप नहीं चाहते हैं। क्यों नहीं:

window.location.hostname == "stackoverflow.com"? 

मुझे लगता है कि कुछ साइटों के लिए आपके पास एक वैकल्पिक सबडोमेन हो सकता है। Www.domain.com की तरह और बस domain.com दोनों एक ही स्थान पर जा रहे हैं। यदि यह एक चिंता का विषय है कि आप कुछ बदसूरत regex कर सकता है, या आप बस डॉट्स पर विभाजित कर सकते हैं:

var domainParts = window.location.hostname.split("."); 
domainParts[domainParts.length - 2] == "stackoverflow" 

मैं मामले मामलों नहीं लगता कि, कम से कम ब्राउज़रों मैंने कोशिश में (फ़ायरफ़ॉक्स और क्रोम) वे डोमेन को सामान्य स्वचालित रूप से लोअरकेस के लिए नाम।

+0

मैं देख रहा हूं कि आप क्या कह रहे हैं, लेकिन एक बदसूरत रेगेक्स का उपयोग क्यों करें जब मैं केवल indexOf()! = -1 का उपयोग कर सकता हूं यह देखने के लिए कि स्ट्रिंग पूरे डोमेन/सबडोमेन का सबस्ट्रिंग है या नहीं? – Shafique

3

आपके सभी समाधान कुशल नहीं हैं! वे मूल रूप से डोमेन नाम वाले सभी चीज़ों से मेल खाते हैं .. उदा। मान लीजिए कि डोमेन "domain.com"

  • `http: // prefixdomain.com`
  • ` http: // domain.com.jo`
  • उप डोमेन `http: //sub.domain .com`
  • पथ: `http:

// whatever.com/domain.com` तो सबसे अच्छा समाधान होगा

function isEquals(myhost){ 
       var hostName = window.location.hostname.split('.'); 
       myhost = myhost.split("."); 
       //handle stuff like site:.com or ..com 
       for (var x in myhost) 
       if (myhost[x] == "") myhost.splice(x,1); 

      //j is where to start comparing in the hostname of the url in question 
      var j = hostName.length - myhost.length; 
      for(var i in myhost) 
      { 
       //if j is undefined or doesn't equal the hostname to match return false 
       if (!hostName[j] || hostName[j].toLowerCase() != host[i].toLowerCase()) 
        return false; 
       j++; 
      } 
      return true; 
     } 
+0

हालांकि यह उत्तर पूछा गया था कि सवाल का जवाब नहीं है। डोमेन को तोड़ने और प्रत्येक व्यक्तिगत भागों की तुलना करने का विचार सराहनीय है। हालांकि मुझे लूप के लिए दूसरी समझ में परेशानी हो रही है। आंशिक रूप से क्योंकि एक टाइपो 'मेजबान [i]' 'संभवतः' 'myhost [i]' 'होना चाहिए। आंशिक रूप से ''var j'' तय किया गया है और'' myhost [j] '' '' myhost [] '' के प्रत्येक तत्व से तुलना की जा रही है। मैं यह देखने में असफल रहा कि यह फ़ंक्शन 'सत्य' कैसे लौटाएगा। – iiminov

+0

कहें कि हम 'http: // sub.domain.com'' की तुलना' 'http: // sub.domain.com'' से कर रहे हैं। इस मामले में '' j'' '' 0'' है। इसलिए '' होस्टनाम [0] '' '' http: // sub'' '' 'myhost ['http: // sub', 'domain', 'com']' 'की तुलना में किया जाएगा। इस मामले में आपके '' if() '' कथन की दूसरी शर्त दूसरे और तीसरे पुनरावृत्ति पर 'सत्य 'होगी। '' मेजबाननाम [जे] '' हमेशा ''false'' वापस लौटा जाना चाहिए जब तक कि 'होस्ट नाम'' 'अनिर्धारित नहीं था। तो यदि आप पहले पुनरावृत्ति के माध्यम से प्राप्त करते हैं तो भी आप बाद के पुनरावृत्तियों पर 'झूठी वापसी' करेंगे। – iiminov

+0

मुझे आशा है कि मैं वास्तव में यहां कुछ गलत समझ रहा हूं क्योंकि मैंने वास्तव में इस फ़ंक्शन का परीक्षण नहीं किया है। लेकिन तर्क अन्यथा निष्कर्ष निकाला। @AmjadMasad अगर दूसरे ''() 'लूप के आंतरिक काम पर विस्तार कर सकता है और इंगित करता है कि मैं इसके पीछे तर्क देखने में विफल रहा हूं। मुझे लगता है कि आप वहां कुछ हैं लेकिन मैं इसे देख नहीं सकता हूं। मैं कुछ नया सीखने की सराहना करता हूं। – iiminov

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