使用の違いは何ですか
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で一致させようとしているだけで、最善のアプローチを使用したいと考えています。
最良で最も読みやすいのは次のとおりです。
if(location.hostname == "mysite.com"){
}
更新:
または、パトリックが指摘したように、ドメイン名の一部のみを探している場合は、match
を使用します。
if(location.hostname.match('mysite')){} // will return null if no match is found
すべてのソリューションが効率的ではありません!それらは基本的にドメイン名を含むすべてに一致します。ドメインが「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;
}
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を返します。
1番目と3番目はシンプルで迅速でなければなりません。 2つのうち、私はそれが本当に重要だとは思いませんドメインをテストしているだけである限り
サブドメインをテストしている場合は、document.domain
javascriptで変更され、window.location.hostname
できません。
ええと、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)では、ドメイン名が自動的に小文字に正規化されています。