Javascriptを使用して現在のドメイン名を取得する(パスなどではない)


245

同じサイトで2つのドメイン名を購入する予定です。使用しているドメインに応じて、ページに少し異なるデータを提供する予定です。コンテンツの変更先がわかるように、ページの読み込み元の実際のドメイン名を検出する方法はありますか?

私はこのようなものを探して回りましたが、そのほとんどは思い通りに動作しません。

例えば使用するとき

document.write(document.location)

JSFiddleそれが返されます

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

つまり、実際のパスまたはそれが何であれ。


1
私があなたが何をしたいかを正確に理解しているかどうかはわかりませんが、これについてはおそらくMDNを検討する必要があります
MilkyWayJoe

少し話題になりますが、2つの個別のドメイン名ではなく、サブドメインを持つことも検討できます。ような何かpremium.random.comfree.random.com
T.Chmelevskij

回答:


454

どうですか:

window.location.hostname

locationオブジェクトは、実際に持っている属性の数 URLの異なる部分を参照し


55
そしてwindow.location.hostname、あなたが取得したくない場合はport(のようなhttp://localhost:3000/window.location.host = 'localhost:3000'およびwindow.location.hostname = 'localhost'
ギリェルメ

6
ポートがドメインに属していないため、答えは間違っています。そしてwindow.location.host時々ポートを戻すでしょう。
Andrej 2016年

4
これはサーバー名も返します( '.amazingjokes.com'だけでなく 'www.amazingjokes.com')
patrick

転送DNSがある場合、これが必要になる可能性があります-window.location.ancestorOrigins
Kirill Gusyatin

123

スクリプトで実行してみます:パス:http:// localhost:4200 / landing?query = 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
これは素晴らしい答えです!
Andrew Campbell

2
私はいくつかの例で答えが大好きです。本当にありがとう。
マグノアルベルト

24

ホスト名(たとえばwww.beta.example.com)ではなくドメイン名(たとえばexample.com)に興味がない場合、これは有効なホスト名に対して機能します。

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

13
不正解です。これはほとんどすべての国際TLDで機能しなくなります。
tbranyen 2014

4
@tbranyenは、あなたが何を参照しているかを説明できますか?考えられる唯一のケースは、のようなサブドメインですamazon.co.uk。しかし、間違いなく「ほぼすべての国際的なTLD」ではありません。実際、Wikipedia
cprcrack '21 / 09/21

1
どういうわけかcprcrackは、より国際的な(アメリカ向けの)TLDに複数のドットが含まれていると思いました。修正してくれてありがとう!
tbranyen 2014

多くの国が英国と同様に機能します。これらの国には固定の第2レベルドメインがあり、ドメインを登録できるのは第3レベルのみです。それらの国のリストはウィキペディアにあります。
ガレス

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;
}

  • getDomain( ' http://www.example.com '); // example.com
  • getDomain( 'www.example.com'); // example.com
  • getDomain( ' http: //blog.example.com'、true ); // blog.example.com
  • getDomain(location.href); // ..

以前のバージョンは完全なドメイン(サブドメインを含む)を取得していました。これで、好みに応じて適切なドメインが決定されます。そのため、2番目の引数がtrueとして提供される場合、サブドメインが含まれます。それ以外の場合は、「メインドメイン」のみが返されます。


1
これは答えである必要がありlocalhost/test.phpますlocalhost。それは、正しい答えでも機能します。
Mohammad AlBanna 2016

それはあなたが合格に任意のURLだけでなく、現在のwindow.locationので動作するので、それはまた、最良の答えだ
sohtimsso1970

これを行うとgoogle.co.uk'co.uk'が返されますが、これは正しくありません...
James Douglas

はい。それはトリッキーなビジネスです。サブドメイン(test.google.co.ukなど)も取得した場合は、さらに注意が必要です。この未加工バージョンを使用したい場合は、いくつかの深刻な調整が必要です(おそらくそれらのTLDの特別なリストを追加することも)。
adelineu

10

JavaScriptのロケーションオブジェクトから簡単に取得できます。

たとえば、このページの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/


なぜjsFiddleではなくjShellを返すのですか?
Freesnöw

2
@XanderLamkins:そのiframe:jsfiddle.net/5U366 <-> fiddle.jshell.net/5U366/show
Saxoier

7

この質問はホスト名ではなくドメイン名を要求するので、正しい答えは

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

これは、www.example.comなどのホスト名でも機能します。


1
これは機能しますが、domain.co.uk、domain.com.brなどのドメインでは機能しません。どのドメインで機能させることができますか?
サメ2017年

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]は機能します。
hiburn8

4

JavaScriptでドメイン名を取得するには、次のコードを使用します。

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

Web URLパスにアクセスできるようにWebページURLパスが必要な場合は、次の例を使用してください。

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


1

JavaScriptは初めてですが、次のように使用できません:document.domain

例:

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

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

出力:

domain.com

または

www.domain.com

あなたがあなたのウェブサイトで何を使うかに応じて。


0

私はそれがこのように単純であるべきだと思います:

url.split("/")[2]


私のために働く。以前のソリューションは、ドキュメント、場所、またはウィンドウオブジェクトに依存していました。
Cris

0

上記からのいくつかの回答を組み合わせると、以下はCookieを破壊するために私にとって本当にうまくいきます:

  /**
   * 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などのポートを持つIPアドレス、および=>をapp.staging.example.com返すような複雑なドメインで.example.com機能し、クロスドメインCookieの設定と破棄が可能です。


0

国のドメイン名が必要な場合-たとえば  、stackoverflow.comから.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;
}

次に、関数を使用して値を変数に割り当てます。

const countryDomainName = getCountryDomainName();

-2
       Feel free to visit our “<a href="javascript:document.location.href=document.location.origin+'/contact-us'" title="Click to Contact Us" class="coded_link" ><span class="ui-icon ui-icon-newwin"></span>Contact</a>” link

PHPを使用できなかったのに、実際に機能しました

いくつかの回答で上記のアプローチのおかげで機能することをテストしました。


@Branditoありがとう、そのサイトはAWS仮想ホストでホストされていたので、ワードプレスを使用していると思いますが、なぜそれを行うと問題が発生するのかわかりません...バックエンドmod書き換えルールを使用します。さらに、jquery uiをテーマにしたツールチップとアイコンを一緒に使用したいと思いました。もちろん最初にクライアントによって承認されました: '-)
Jean Paul AKA el_vete
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.