33

javascriptを使用してexample.com可能なサブドメインのセットからドメイン名を取得するにはどうすればよいですか...?sub1.example.com sub2.example.com sub3.example.com

4

7 に答える 7

87
var parts = location.hostname.split('.');
var subdomain = parts.shift();
var upperleveldomain = parts.join('.');

セカンドレベルドメインのみを取得するには、

var parts = location.hostname.split('.');
var sndleveldomain = parts.slice(-2).join('.');
于 2012-11-13T19:44:01.337 に答える
5

受け入れられた回答は、セカンドレベルドメインを取得するために機能します。ただし、考慮に入れることができる「パブリックサフィックス」と呼ばれるものがあります。そうしないと、予期しない誤った結果が生じる可能性があります。

たとえば、ドメインを取りますwww.amazon.co.uk。セカンドレベルドメインを取得しようとすると、最終的にはco.uk、これはおそらくあなたが望むものではありません。これco.ukは、が「パブリックサフィックス」であり、本質的にトップレベルドメインであることを意味するためです。https://publicsuffix.orgから取得したパブリックサフィックスの定義は次のとおりです。

「パブリックサフィックス」とは、インターネットユーザーが名前を直接登録できる(または歴史的に可能であった)サフィックスです。

これがアプリケーションの重要な部分である場合は、ドメイン解析のためにpslhttps://github.com/lupomontero/psl )のようなものを調べます。nodejsとブラウザで動作し、Mozillaの維持されているパブリックサフィックスリストでテストされています。

READMEの簡単な例を次に示します。

var psl = require('psl');

// TLD with some 2-level rules.
psl.get('uk.com'); // null);
psl.get('example.uk.com'); // 'example.uk.com');
psl.get('b.example.uk.com'); // 'example.uk.com');
于 2020-02-29T23:06:25.340 に答える
4

これは速いです

const firstDotIndex = subDomain.indexOf('.');
const domain = subDomain.substring(firstDotIndex + 1);
于 2017-04-05T17:55:43.107 に答える
1

一般的な解決策はここで説明されていますhttp://rossscrivener.co.uk/blog/javascript-get-domain-exclude-subdomain 上記のリンクから

var domain = (function(){
   var i=0,domain=document.domain,p=domain.split('.'),s='_gd'+(new Date()).getTime();
   while(i<(p.length-1) && document.cookie.indexOf(s+'='+s)==-1){
      domain = p.slice(-1-(++i)).join('.');
      document.cookie = s+"="+s+";domain="+domain+";";
   }
   document.cookie = s+"=;expires=Thu, 01 Jan 1970 00:00:01 GMT;domain="+domain+";";
   return domain;
})();
于 2018-03-13T12:47:03.567 に答える
0

    function getDomain() {
        const hostnameArray = window.location.hostname.split('.')
        const numberOfSubdomains = hostnameArray.length - 2
        return hostnameArray.length === 2 ? window.location.hostname : hostnameArray.slice(numberOfSubdomains).join('.')
    }
    console.log(getDomain());

これによりすべてのサブドメインが削除されるため、「abcdtest.com」は「test.com」になります

于 2020-02-14T14:16:23.157 に答える
0

特定のサブドメインが存在するかどうかを確認する場合

var parts = location.hostname.split('.');
if(parts.includes('subdomain_to_search_here')){
   //yes
}else{
   //no
}
于 2021-01-22T20:06:22.367 に答える
0

サブドメインの数に依存しない、より堅牢なバージョン

function getDomain() {
   const hostname = window.location.hostname.split('.');
   domain.reverse();
   return `${hostname[1]}.${hostname[0]}`;
}
于 2022-02-25T16:04:23.150 に答える