web-dev-qa-db-ja.com

JavaScriptでドメイン名を決定しますか?

使用の違いは何ですか

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で一致させようとしているだけで、最善のアプローチを使用したいと考えています。

17
Shafique

最良で最も読みやすいのは次のとおりです。

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

}

更新:

または、パトリックが指摘したように、ドメイン名の一部のみを探している場合は、matchを使用します。

if(location.hostname.match('mysite')){} // will return null if no match is found
44
Josiah Ruddell

すべてのソリューションが効率的ではありません!それらは基本的にドメイン名を含むすべてに一致します。ドメインが「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;
      }
3
Amjad Masad

読み取り可能な方法:

endsWith() を使用して、 hostname 文字列の末尾をドメイン名と比較できます。

_location.hostname === 'stackexchange.com' || location.hostname.endsWith('.stackexchange.com')
_

注:これにはECMAScript 6(ES6)のサポートが必要です。

短い方法:

または、 test() メソッドで正規表現を使用したい場合は、次を使用できます。

_/(^|\.)stackexchange\.com$/.test(location.hostname)
_

配列から文字列への分割/結合メソッド:

さらに、 split()hostname を_._文字に基づく配列に入れることもできます。次に、 slice() を使用して最後の2つの要素(ドメイン名と拡張子)を取得し、 join() と一緒に戻すことができます。区切り文字としての_._文字。これにより、予想されるドメイン名と直接比較できます。

_location.hostname.split('.').slice(-2).join('.') === 'stackexchange.com'
_

これは、次のタイプのURLに対してtrueを返します。

2
Grant Miller

1番目と3番目はシンプルで迅速でなければなりません。 2つのうち、私はそれが本当に重要だとは思いませんドメインをテストしているだけである限り

サブドメインをテストしている場合は、document.domain javascriptで変更され、window.location.hostnameできません。

2
user113716

ええと、window.locationがより標準的な方法なので、document.domain以上にすることをお勧めします。 IndexOfは部分文字列に一致しますが、これはおそらくあなたが望むものではありません。なぜだけではないのですか?

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

一部のサイトでは、オプションのサブドメインがあると思います。 www.domain.comとちょうどdomain.comのように両方とも同じ場所に行きます。それが懸念事項である場合は、醜い正規表現を作成するか、ドットで分割することができます。

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

大文字と小文字は関係ないと思います。少なくとも私が試したブラウザ(FirefoxとChrome)では、ドメイン名が自動的に小文字に正規化されています。

1
jpsimons