开发者

How to get base domain from the URL in JavaScript

开发者 https://www.devze.com 2023-03-14 16:31 出处:网络
I would like to extract the base domain from the url in javascript. For example for the list of urls listed below I need to get google.com (or google.co.in as the case may be) as the res开发者_开发百科

I would like to extract the base domain from the url in javascript. For example for the list of urls listed below I need to get google.com (or google.co.in as the case may be) as the res开发者_开发百科ult.

www.google.com

www.google.co.in

www.images.google.com

www.images.google.co.in

google.com

google.co.in

images.google.com

images.google.co.in

Any one got some idea on how to do it. There is no direct method to find the base url in javascript i guess.


This one works only if you are at the url you want to get the Top Level Hostname.

This function guarantees you get the top-level hostname because that's the smallest one browsers will let you set cookies in. We test if for a given prefix we are able to set cookies, if so we return that otherwise we try the next prefix until we find the one that works.

Will fail if the browser is configured to disallow cookies, or possibly in restricted hostnames such as localhost

function get_top_domain(){
  var i,h,
    weird_cookie='weird_get_top_level_domain=cookie',
    hostname = document.location.hostname.split('.');
  for(i=hostname.length-1; i>=0; i--) {
    h = hostname.slice(i).join('.');
    document.cookie = weird_cookie + ';domain=.' + h + ';';
    if(document.cookie.indexOf(weird_cookie)>-1){
      // We were able to store a cookie! This must be it
      document.cookie = weird_cookie.split('=')[0] + '=;domain=.' + h + ';expires=Thu, 01 Jan 1970 00:00:01 GMT;';
      return h;
    }
  }
}


This depends on just how rigorous you need to be. The full list of valid top-level domains is given here, but the rules given here are possibly more helpful.

A simple, probably incomplete regex:

/[-\w]+\.(?:[-\w]+\.xn--[-\w]+|[-\w]{3,}|[-\w]+\.[-\w]{2})$/i

Usage is something like this (I'm not great with Javascript regex):

var match = HOSTDOMAIN.exec('www.google.co.in');
if (match == null) {
    alert('not a valid domain!');
} else {
    domain = match[0];
}


You can try this method

var url = 'https://www.petzlover.com/us/search?pet=1&breed=262';

extractHostname(url,true); //petzlover.com

extractHostname(url); //www.petzlover.com

function extractHostname(url,tld) {
      let hostname;

      //find & remove protocol (http, ftp, etc.) and get hostname
      if (url.indexOf("://") > -1) {
          hostname = url.split('/')[2];
      }else {
          hostname = url.split('/')[0];
      }

      //find & remove port number
      hostname = hostname.split(':')[0];

      //find & remove "?"
      hostname = hostname.split('?')[0];

      if(tld){
        let hostnames = hostname.split('.');
        hostname = hostnames[hostnames.length-2] + '.' + hostnames[hostnames.length-1];
      }

      return hostname;
  }

let url = 'https://www.petzlover.com/us/search?pet=1&breed=262';

let longUrl = 'https://www.fr.petzlover.com/us/search?pet=1&breed=262';

let topLevelDomain = extractHostname(url,true); //petzlover.com
let subDomain = extractHostname(url); //www.petzlover.com
let lengthySubDomain = extractHostname(longUrl); //www.fr.petzlover.com

document.getElementById('top-level-domain').innerHTML = topLevelDomain;
document.getElementById('sub-domain').innerHTML = subDomain;
document.getElementById('lengthy-sub-domain').innerHTML = lengthySubDomain;

    function extractHostname(url,tld) {
          let hostname;
    
          //find & remove protocol (http, ftp, etc.) and get hostname
          if (url.indexOf("://") > -1) {
              hostname = url.split('/')[2];
          }else {
              hostname = url.split('/')[0];
          }
    
          //find & remove port number
          hostname = hostname.split(':')[0];

          //find & remove "?"
          hostname = hostname.split('?')[0];
    
          if(tld){
            let hostnames = hostname.split('.');
            hostname = hostnames[hostnames.length-2] + '.' + hostnames[hostnames.length-1];
          }
    
          return hostname;
      }
span{
  font-weight:bold;
  font-size:16px;
}
<div>Top Level Domain: <span id="top-level-domain"></span> </div>
<div>Including sub Domain: <span id="sub-domain"></span> </div>
<div>Including lengthy sub Domain: <span id="lengthy-sub-domain"></span> </div>


You could use document.domain to determine the eTLD+1 of the current page.

When setting document.domain, an error is thrown if the new value is invalid. A plain eTLD is invalid, while an eTLD+1 is valid. The browser internally uses the Public Suffix List to validate new values.

function getDomain() {
    const original = document.domain;
    const parts = location.hostname.split('.');
    let domain = parts.pop();
    while (parts.length) {
        domain = parts.pop() + '.' + domain;
        try {
            document.domain = domain;
            // we found the eTLD+1
            break;
        } catch (e) {
            // eTLDs and eTLD fragments fail
        }
    }
    // reset before returning
    document.domain = original;
    return domain;
}


This is quite long but you can use the function extractRootDomain and the sintax is typescript

extractHostname(url: stringType) {
let hostname: string;

// find & remove protocol (http, ftp, etc.) and get hostname

if (url.indexOf("//") > -1) {
  hostname = url.split("/")[2];
} else {
  hostname = url.split("/")[0];
}

// find & remove port number
hostname = hostname.split(":")[0];
// find & remove "?"
hostname = hostname.split("?")[0];

return hostname;
}

// To address those who want the "root domain," use this function:
extractRootDomain(url: string) {
let domain = this.extractHostname(url);
const splitArr = domain.split(".");
const arrLen = splitArr.length;

// extracting the root domain here
// if there is a subdomain
if (arrLen > 2) {
  domain = splitArr[arrLen - 2] + "." + splitArr[arrLen - 1];
  // check to see if it's using a Country Code Top Level Domain (ccTLD) (i.e. ".me.uk")
  if (
    (splitArr[arrLen - 2].length === 2 &&
    splitArr[arrLen - 1].length === 2)
    || this.isTopLevelDomain(domain)
  ) {
    // this is using a ccTLD
    domain = splitArr[arrLen - 3] + "." + domain;
  }
}
return domain;
}

isTopLevelDomain(url: string) {
const tld = [
  "edu.ac",
  "c.se",
  "d.se",
  "e.se",
  "f.se",
  "g.se",
  "h.se",
  "i.se",
  "k.se",
  "m.se",
  "n.se",
  "o.se",
  "s.se",
  "t.se",
  "u.se",
  "w.se",
  "x.se",
  "y.se",
  "z.se",
  "ac.ae",
  "co.ag",
  "co.ao",
  "ed.ao",
  "gv.ao",
  "it.ao",
  "og.ao",
  "pb.ao",
  "gv.at",
  "ac.at",
  "co.at",
  "or.at",
  "id.au",
  "oz.au",
  "nt.au",
  "sa.au",
  "wa.au",
  "pp.az",
  "ac.be",
  "tv.bo",
  "am.br",
  "fm.br",
  "tv.br",
  "co.bw",
  "ab.ca",
  "bc.ca",
  "mb.ca",
  "nb.ca",
  "nf.ca",
  "nl.ca",
  "ns.ca",
  "nt.ca",
  "nu.ca",
  "on.ca",
  "pe.ca",
  "qc.ca",
  "sk.ca",
  "yk.ca",
  "co.cc",
  "co.ck",
  "ac.cn",
  "ah.cn",
  "bj.cn",
  "cq.cn",
  "fj.cn",
  "gd.cn",
  "gs.cn",
  "gz.cn",
  "gx.cn",
  "ha.cn",
  "hb.cn",
  "he.cn",
  "hi.cn",
  "hl.cn",
  "hn.cn",
  "jl.cn",
  "js.cn",
  "jx.cn",
  "ln.cn",
  "nm.cn",
  "nx.cn",
  "qh.cn",
  "sc.cn",
  "sd.cn",
  "sh.cn",
  "sn.cn",
  "sx.cn",
  "tj.cn",
  "xj.cn",
  "xz.cn",
  "yn.cn",
  "zj.cn",
  "us.com",
  "ac.cr",
  "co.cr",
  "ed.cr",
  "fi.cr",
  "go.cr",
  "or.cr",
  "sa.cr",
  "tm.cy",
  "ac.cy",
  "ac.fj",
  "co.fk",
  "ac.fk",
  "tm.fr",
  "co.gg",
  "ac.gn",
  "iz.hr",
  "co.hu",
  "tm.hu",
  "ac.id",
  "co.id",
  "or.id",
  "go.id",
  "ac.il",
  "co.il",
  "co.im",
  "ac.im",
  "co.in",
  "ac.in",
  "ac.ir",
  "co.ir",
  "co.je",
  "ac.jp",
  "ad.jp",
  "co.jp",
  "ed.jp",
  "go.jp",
  "gr.jp",
  "lg.jp",
  "ne.jp",
  "or.jp",
  "co.kr",
  "or.kr",
  "co.ls",
  "id.lv",
  "id.ly",
  "co.ma",
  "tm.mc",
  "tm.mg",
  "co.mu",
  "ac.mw",
  "co.mw",
  "ac.nz",
  "co.nz",
  "co.om",
  "ac.com",
  "ac.pa",
  "tm.ro",
  "nt.ro",
  "pp.ru",
  "ac.ru",
  "ac.rw",
  "co.rw",
  "tv.sd",
  "pp.se",
  "tm.se",
  "fh.se",
  "ab.se",
  "ac.se",
  "bd.se",
  "ac.th",
  "co.th",
  "in.th",
  "go.th",
  "mi.th",
  "or.th",
  "ac.tj",
  "co.tj",
  "go.tj",
  "av.tr",
  "dr.tr",
  "co.tt",
  "co.tz",
  "ac.tz",
  "go.tz",
  "or.tz",
  "ne.tz",
  "ck.ua",
  "cn.ua",
  "cv.ua",
  "dp.ua",
  "dn.ua",
  "if.ua",
  "kh.ua",
  "ks.ua",
  "km.ua",
  "kv.ua",
  "kr.ua",
  "lg.ua",
  "mk.ua",
  "od.ua",
  "pl.ua",
  "rv.ua",
  "te.ua",
  "vn.ua",
  "zp.ua",
  "zt.ua",
  "co.ug",
  "ac.ug",
  "sc.ug",
  "go.ug",
  "ne.ug",
  "or.ug",
  "ac.uk",
  "co.uk",
  "me.uk",
  "bl.uk",
  "ak.us",
  "al.us",
  "ar.us",
  "az.us",
  "ca.us",
  "co.us",
  "ct.us",
  "dc.us",
  "de.us",
  "fl.us",
  "ga.us",
  "hi.us",
  "ia.us",
  "id.us",
  "il.us",
  "in.us",
  "ks.us",
  "ky.us",
  "la.us",
  "ma.us",
  "md.us",
  "me.us",
  "mi.us",
  "mn.us",
  "mo.us",
  "ms.us",
  "mt.us",
  "nc.us",
  "nd.us",
  "ne.us",
  "nh.us",
  "nj.us",
  "nm.us",
  "nv.us",
  "ny.us",
  "oh.us",
  "ok.us",
  "or.us",
  "pa.us",
  "ri.us",
  "sc.us",
  "sd.us",
  "tn.us",
  "tx.us",
  "ut.us",
  "vt.us",
  "va.us",
  "wa.us",
  "wi.us",
  "wv.us",
  "wy.us",
  "co.ve",
  "ac.vn",
  "ac.yu",
  "co.yu",
  "ac.za",
  "co.za",
  "tm.za",
  "co.zm",
  "ac.zm",
  "co.zw",
  "ac.zw",
  "gov.ac",
  "net.ac",
  "mil.ac",
  "org.ac",
  "nom.ad",
  "net.ae",
  "gov.ae",
  "org.ae",
  "mil.ae",
  "sch.ae",
  "pro.ae",
  "gov.af",
  "edu.af",
  "net.af",
  "com.af",
  "com.ag",
  "org.ag",
  "net.ag",
  "nom.ag",
  "off.ai",
  "com.ai",
  "net.ai",
  "org.ai",
  "gov.al",
  "edu.al",
  "org.al",
  "com.al",
  "net.al",
  "upt.al",
  "com.an",
  "net.an",
  "org.an",
  "edu.an",
  "com.ar",
  "gov.ar",
  "int.ar",
  "mil.ar",
  "net.ar",
  "org.ar",
  "ip6.arpa",
  "uri.arpa",
  "urn.arpa",
  "asn.au",
  "com.au",
  "net.au",
  "org.au",
  "act.au",
  "nsw.au",
  "qld.au",
  "tas.au",
  "vic.au",
  "gov.au",
  "edu.au:",
  "com.aw",
  "com.az",
  "net.az",
  "int.az",
  "gov.az",
  "biz.az",
  "org.az",
  "edu.az",
  "mil.az",
  "com.bb",
  "edu.bb",
  "gov.bb",
  "net.bb",
  "org.bb",
  "com.bd",
  "edu.bd",
  "net.bd",
  "gov.bd",
  "org.bd",
  "mil.bd",
  "gov.bf",
  "com.bm",
  "edu.bm",
  "org.bm",
  "gov.bm",
  "net.bm",
  "com.bn",
  "edu.bn",
  "org.bn",
  "net.bn",
  "com.bo",
  "org.bo",
  "net.bo",
  "gov.bo",
  "gob.bo",
  "edu.bo",
  "mil.bo",
  "int.bo",
  "agr.br",
  "art.br",
  "edu.br",
  "com.br",
  "esp.br",
  "far.br",
  "g12.br",
  "gov.br",
  "imb.br",
  "ind.br",
  "inf.br",
  "mil.br",
  "net.br",
  "org.br",
  "psi.br",
  "rec.br",
  "srv.br",
  "tmp.br",
  "tur.br",
  "etc.br",
  "adm.br",
  "adv.br",
  "arq.br",
  "ato.br",
  "bio.br",
  "bmd.br",
  "cim.br",
  "cng.br",
  "cnt.br",
  "ecn.br",
  "eng.br",
  "eti.br",
  "fnd.br",
  "fot.br",
  "fst.br",
  "ggf.br",
  "jor.br",
  "lel.br",
  "mat.br",
  "med.br",
  "mus.br",
  "not.br",
  "ntr.br",
  "odo.br",
  "ppg.br",
  "pro.br",
  "psc.br",
  "qsl.br",
  "slg.br",
  "trd.br",
  "vet.br",
  "zlg.br",
  "dpn.br",
  "nom.br",
  "com.bs",
  "net.bs",
  "org.bs",
  "com.bt",
  "edu.bt",
  "gov.bt",
  "net.bt",
  "org.bt",
  "org.bw",
  "gov.by",
  "mil.by",
  "com.cd",
  "net.cd",
  "org.cd",
  "com.ch",
  "net.ch",
  "org.ch",
  "gov.ch",
  "com.cn",
  "edu.cn",
  "gov.cn",
  "net.cn",
  "org.cn",
  "com.co",
  "edu.co",
  "org.co",
  "gov.co",
  "mil.co",
  "net.co",
  "nom.co",
  "com.cu",
  "edu.cu",
  "org.cu",
  "net.cu",
  "gov.cu",
  "inf.cu",
  "gov.cx",
  "com.cy",
  "biz.cy",
  "ltd.cy",
  "pro.cy",
  "net.cy",
  "org.cy",
  "com.dm",
  "net.dm",
  "org.dm",
  "edu.dm",
  "gov.dm",
  "edu.do",
  "gov.do",
  "gob.do",
  "com.do",
  "org.do",
  "sld.do",
  "web.do",
  "net.do",
  "mil.do",
  "art.do",
  "com.dz",
  "org.dz",
  "net.dz",
  "gov.dz",
  "edu.dz",
  "pol.dz",
  "art.dz",
  "com.ec",
  "net.ec",
  "fin.ec",
  "med.ec",
  "pro.ec",
  "org.ec",
  "edu.ec",
  "gov.ec",
  "mil.ec",
  "com.ee",
  "org.ee",
  "fie.ee",
  "pri.ee",
  "eun.eg",
  "edu.eg",
  "sci.eg",
  "gov.eg",
  "com.eg",
  "org.eg",
  "net.eg",
  "mil.eg",
  "com.es",
  "nom.es",
  "org.es",
  "gob.es",
  "edu.es",
  "com.et",
  "gov.et",
  "org.et",
  "edu.et",
  "net.et",
  "biz.et",
  "biz.fj",
  "com.fj",
  "net.fj",
  "org.fj",
  "pro.fj",
  "gov.fj",
  "mil.fj",
  "org.fk",
  "gov.fk",
  "nom.fk",
  "net.fk",
  "nom.fr",
  "prd.fr",
  "com.fr",
  "com.ge",
  "edu.ge",
  "gov.ge",
  "org.ge",
  "mil.ge",
  "net.ge",
  "pvt.ge",
  "net.gg",
  "org.gg",
  "com.gh",
  "edu.gh",
  "gov.gh",
  "org.gh",
  "mil.gh",
  "com.gi",
  "ltd.gi",
  "gov.gi",
  "mod.gi",
  "edu.gi",
  "org.gi",
  "com.gn",
  "gov.gn",
  "org.gn",
  "net.gn",
  "com.gp",
  "net.gp",
  "edu.gp",
  "org.gp",
  "com.gr",
  "edu.gr",
  "net.gr",
  "org.gr",
  "gov.gr",
  "com.hk",
  "edu.hk",
  "gov.hk",
  "idv.hk",
  "net.hk",
  "org.hk",
  "com.hn",
  "edu.hn",
  "org.hn",
  "net.hn",
  "mil.hn",
  "gob.hn",
  "com.hr",
  "com.ht",
  "net.ht",
  "pro.ht",
  "org.ht",
  "art.ht",
  "pol.ht",
  "rel.ht",
  "med.ht",
  "edu.ht",
  "org.hu",
  "sex.hu",
  "gov.ie",
  "org.il",
  "net.il",
  "k12.il",
  "gov.il",
  "idf.il",
  "ltd.co.im",
  "plc.co.im",
  "net.im",
  "gov.im",
  "org.im",
  "nic.im",
  "net.in",
  "org.in",
  "gen.in",
  "ind.in",
  "nic.in",
  "edu.in",
  "res.in",
  "gov.in",
  "mil.in",
  "gov.ir",
  "net.ir",
  "org.ir",
  "sch.ir",
  "gov.it",
  "net.je",
  "org.je",
  "edu.jm",
  "gov.jm",
  "com.jm",
  "net.jm",
  "org.jm",
  "com.jo",
  "org.jo",
  "net.jo",
  "edu.jo",
  "gov.jo",
  "mil.jo",
  "mie.jp",
  "per.kh",
  "com.kh",
  "edu.kh",
  "gov.kh",
  "mil.kh",
  "net.kh",
  "org.kh",
  "com.kw",
  "edu.kw",
  "gov.kw",
  "net.kw",
  "org.kw",
  "mil.kw",
  "edu.ky",
  "gov.ky",
  "com.ky",
  "org.ky",
  "net.ky",
  "org.kz",
  "edu.kz",
  "net.kz",
  "gov.kz",
  "mil.kz",
  "com.kz",
  "net.lb",
  "org.lb",
  "gov.lb",
  "edu.lb",
  "com.lb",
  "com.lc",
  "org.lc",
  "edu.lc",
  "gov.lc",
  "com.li",
  "net.li",
  "org.li",
  "gov.li",
  "gov.lk",
  "sch.lk",
  "net.lk",
  "int.lk",
  "com.lk",
  "org.lk",
  "edu.lk",
  "ngo.lk",
  "soc.lk",
  "web.lk",
  "ltd.lk",
  "grp.lk",
  "com.lr",
  "edu.lr",
  "gov.lr",
  "org.lr",
  "net.lr",
  "org.ls",
  "gov.lt",
  "mil.lt",
  "gov.lu",
  "mil.lu",
  "org.lu",
  "net.lu",
  "com.lv",
  "edu.lv",
  "gov.lv",
  "org.lv",
  "mil.lv",
  "net.lv",
  "asn.lv",
  "com.ly",
  "net.ly",
  "gov.ly",
  "plc.ly",
  "edu.ly",
  "sch.ly",
  "med.ly",
  "org.ly",
  "net.ma",
  "gov.ma",
  "org.ma",
  "org.mg",
  "nom.mg",
  "gov.mg",
  "prd.mg",
  "com.mg",
  "edu.mg",
  "mil.mg",
  "com.mk",
  "org.mk",
  "com.mo",
  "net.mo",
  "org.mo",
  "edu.mo",
  "gov.mo",
  "org.mt",
  "com.mt",
  "gov.mt",
  "edu.mt",
  "net.mt",
  "com.mu",
  "biz.mv",
  "com.mv",
  "edu.mv",
  "gov.mv",
  "int.mv",
  "mil.mv",
  "net.mv",
  "org.mv",
  "pro.mv",
  "com.mw",
  "edu.mw",
  "gov.mw",
  "int.mw",
  "net.mw",
  "org.mw",
  "com.mx",
  "net.mx",
  "org.mx",
  "edu.mx",
  "gob.mx",
  "com.my",
  "net.my",
  "org.my",
  "gov.my",
  "edu.my",
  "mil.my",
  "edu.ng",
  "com.ng",
  "gov.ng",
  "org.ng",
  "net.ng",
  "gob.ni",
  "com.ni",
  "edu.ni",
  "org.ni",
  "nom.ni",
  "net.ni",
  "mil.no",
  "vgs.no",
  "fhs.no",
  "com.np",
  "org.np",
  "edu.np",
  "net.np",
  "gov.np",
  "mil.np",
  "gov.nr",
  "edu.nr",
  "biz.nr",
  "org.nr",
  "com.nr",
  "net.nr",
  "cri.nz",
  "gen.nz",
  "iwi.nz",
  "mil.nz",
  "net.nz",
  "org.nz",
  "com.om",
  "edu.om",
  "sch.om",
  "gov.om",
  "net.om",
  "org.om",
  "mil.om",
  "biz.om",
  "pro.om",
  "med.om",
  "com.pa",
  "sld.pa",
  "gob.pa",
  "edu.pa",
  "org.pa",
  "net.pa",
  "abo.pa",
  "ing.pa",
  "med.pa",
  "nom.pa",
  "com.pe",
  "org.pe",
  "net.pe",
  "edu.pe",
  "mil.pe",
  "gob.pe",
  "nom.pe",
  "com.pf",
  "org.pf",
  "edu.pf",
  "com.pg",
  "net.pg",
  "com.ph",
  "gov.ph",
  "com.pk",
  "net.pk",
  "edu.pk",
  "org.pk",
  "fam.pk",
  "biz.pk",
  "web.pk",
  "gov.pk",
  "gob.pk",
  "gok.pk",
  "gon.pk",
  "gop.pk",
  "gos.pk",
  "com.pl",
  "biz.pl",
  "net.pl",
  "art.pl",
  "edu.pl",
  "org.pl",
  "ngo.pl",
  "gov.pl",
  "mil.pl",
  "waw.pl",
  "gda.pl",
  "biz.pr",
  "com.pr",
  "edu.pr",
  "gov.pr",
  "net.pr",
  "org.pr",
  "pro.pr",
  "law.pro",
  "med.pro",
  "cpa.pro",
  "edu.ps",
  "gov.ps",
  "sec.ps",
  "plo.ps",
  "com.ps",
  "org.ps",
  "net.ps",
  "com.pt",
  "edu.pt",
  "gov.pt",
  "int.pt",
  "net.pt",
  "org.pt",
  "net.py",
  "org.py",
  "gov.py",
  "edu.py",
  "com.py",
  "com.ro",
  "org.ro",
  "nom.ro",
  "rec.ro",
  "www.ro",
  "com.ru",
  "net.ru",
  "org.ru",
  "msk.ru",
  "int.ru",
  "gov.rw",
  "net.rw",
  "edu.rw",
  "com.rw",
  "int.rw",
  "mil.rw",
  "gov.rw",
  "com.sa",
  "edu.sa",
  "sch.sa",
  "med.sa",
  "gov.sa",
  "net.sa",
  "org.sa",
  "pub.sa",
  "com.sb",
  "gov.sb",
  "net.sb",
  "edu.sb",
  "com.sc",
  "gov.sc",
  "net.sc",
  "org.sc",
  "edu.sc",
  "com.sd",
  "net.sd",
  "org.sd",
  "edu.sd",
  "med.sd",
  "gov.sd",
  "org.se",
  "fhv.se",
  "mil.se",
  "com.sg",
  "net.sg",
  "org.sg",
  "gov.sg",
  "edu.sg",
  "per.sg",
  "idn.sg",
  "edu.sv",
  "com.sv",
  "gob.sv",
  "org.sv",
  "red.sv",
  "gov.sy",
  "com.sy",
  "net.sy",
  "net.th",
  "biz.tj",
  "com.tj",
  "edu.tj",
  "int.tj",
  "net.tj",
  "org.tj",
  "web.tj",
  "gov.tj",
  "mil.tj",
  "com.tn",
  "gov.tn",
  "org.tn",
  "ind.tn",
  "nat.tn",
  "ens.tn",
  "fin.tn",
  "net.tn",
  "gov.to",
  "gov.tp",
  "com.tr",
  "biz.tr",
  "net.tr",
  "org.tr",
  "web.tr",
  "gen.tr",
  "bbs.tr",
  "tel.tr",
  "gov.tr",
  "bel.tr",
  "pol.tr",
  "mil.tr",
  "k12.tr",
  "edu.tr",
  "com.tt",
  "org.tt",
  "net.tt",
  "biz.tt",
  "pro.tt",
  "edu.tt",
  "gov.tt",
  "gov.tv",
  "edu.tw",
  "gov.tw",
  "mil.tw",
  "com.tw",
  "net.tw",
  "org.tw",
  "idv.tw",
  "com.ua",
  "gov.ua",
  "net.ua",
  "edu.ua",
  "org.ua",
  "gov.uk",
  "ltd.uk",
  "mil.uk",
  "mod.uk",
  "net.uk",
  "nic.uk",
  "nhs.uk",
  "org.uk",
  "plc.uk",
  "sch.uk",
  "jet.uk",
  "nel.uk",
  "nls.uk",
  "sch.uk",
  "dni.us",
  "fed.us",
  "isa.us",
  "nsn.us",
  "edu.uy",
  "gub.uy",
  "org.uy",
  "com.uy",
  "net.uy",
  "mil.uy",
  "com.ve",
  "net.ve",
  "org.ve",
  "web.ve",
  "com.vi",
  "org.vi",
  "edu.vi",
  "gov.vi",
  "com.vn",
  "net.vn",
  "org.vn",
  "edu.vn",
  "gov.vn",
  "int.vn",
  "biz.vn",
  "pro.vn",
  "com.ye",
  "net.ye",
  "org.yu",
  "edu.yu",
  "edu.za",
  "gov.za",
  "law.za",
  "mil.za",
  "nom.za",
  "org.za",
  "alt.za",
  "net.za",
  "ngo.za",
  "web.za",
  "org.zm",
  "gov.zm",
  "sch.zm",
  "org.zw",
  "gov.zw",
  "name.ae",
  "e164.arpa",
  "iris.arpa",
  "priv.at",
  "info.au",
  "conf.au",
  "name.az",
  "info.az",
  "coop.br",
  "info.cy",
  "name.cy",
  "asso.dz",
  "info.ec",
  "name.et",
  "info.et",
  "info.fj",
  "name.fj",
  "asso.fr",
  "gouv.fr",
  "asso.gp",
  "from.hr",
  "name.hr",
  "firm.ht",
  "shop.ht",
  "info.ht",
  "asso.ht",
  "coop.ht",
  "gouv.ht",
  "info.hu",
  "priv.hu",
  "2000.hu",
  "bolt.hu",
  "city.hu",
  "film.hu",
  "news.hu",
  "shop.hu",
  "suli.hu",
  "szex.hu",
  "muni.il",
  "firm.in",
  "gifu.jp",
  "nara.jp",
  "saga.jp",
  "oita.jp",
  "kobe.jp",
  "assn.lk",
  "conf.lv",
  "asso.mc",
  "army.mil",
  "navy.mil",
  "aero.mv",
  "coop.mv",
  "info.mv",
  "name.mv",
  "coop.mw",
  "name.my",
  "stat.no",
  "priv.no",
  "info.nr",
  "geek.nz",
  "govt.nz",
  "info.pl",
  "wroc.pl",
  "lodz.pl",
  "info.pr",
  "isla.pr",
  "name.pr",
  "nome.pt",
  "publ.pt",
  "info.ro",
  "arts.ro",
  "firm.ro",
  "info.sd",
  "sshn.se",
  "fhsk.se",
  "name.tj",
  "intl.tn",
  "info.tn",
  "info.tr",
  "name.tr",
  "info.tt",
  "name.tt",
  "game.tw",
  "ebiz.tw",
  "club.tw",
  "kiev.ua",
  "lviv.ua",
  "sumy.ua",
  "kids.us",
  "info.ve",
  "info.vn",
  "name.vn",
  "city.za",
  "uniti.al",
  "soros.al",
  "inima.al",
  "csiro.au",
  "press.cy",
  "aland.fi",
  "adult.ht",
  "perso.ht",
  "sport.hu",
  "agrar.hu",
  "forum.hu",
  "games.hu",
  "hotel.hu",
  "lakas.hu",
  "media.hu",
  "video.hu",
  "iwate.jp",
  "akita.jp",
  "gunma.jp",
  "chiba.jp",
  "tokyo.jp",
  "fukui.jp",
  "aichi.jp",
  "shiga.jp",
  "kyoto.jp",
  "osaka.jp",
  "hyogo.jp",
  "ehime.jp",
  "kochi.jp",
  "hotel.lk",
  "music.mobi",
  "herad.no",
  "maori.nz",
  "store.ro",
  "brand.se",
  "parti.se",
  "press.se",
  "lutsk.ua",
  "rovno.ua",
  "icnet.uk",
  "tirana.al",
  "school.fj",
  "presse.fr",
  "casino.hu",
  "jogasz.hu",
  "reklam.hu",
  "tozsde.hu",
  "utazas.hu",
  "aomori.jp",
  "miyagi.jp",
  "toyama.jp",
  "nagano.jp",
  "kagawa.jp",
  "sendai.jp",
  "nagoya.jp",
  "museum.mv",
  "museum.mw",
  "museum.no",
  "idrett.no",
  "school.nz",
  "museum.om",
  "krakow.pl",
  "poznan.pl",
  "gdansk.pl",
  "slupsk.pl",
  "lublin.pl",
  "komvux.se",
  "lanarb.se",
  "lanbib.se",
  "crimea.ua",
  "odessa.ua",
  "police.uk",
  "health.vn",
  "school.za",
  "in-addr.arpa",
  "ekloges.cy",
  "erotica.hu",
  "erotika.hu",
  "ibaraki.jp",
  "tochigi.jp",
  "saitama.jp",
  "niigata.jp",
  "tottori.jp",
  "shimane.jp",
  "okayama.jp",
  "fukuoka.jp",
  "okinawa.jp",
  "sapporo.jp",
  "weather.mobi",
  "kommune.no",
  "wroclaw.pl",
  "olsztyn.pl.torun.pl",
  "komforb.se",
  "tourism.tn",
  "donetsk.ua",
  "kharkov.ua",
  "kherson.ua",
  "lugansk.ua",
  "poltava.ua",
  "vinnica.ua",
  "vatican.va",
  "ingatlan.hu",
  "konyvelo.hu",
  "hokkaido.jp",
  "yamagata.jp",
  "kanagawa.jp",
  "ishikawa.jp",
  "shizuoka.jp",
  "wakayama.jp",
  "nagasaki.jp",
  "kumamoto.jp",
  "miyazaki.jp",
  "yokohama.jp",
  "kawasaki.jp",
  "warszawa.pl",
  "szczecin.pl",
  "nikolaev.ua",
  "ternopil.ua",
  "uzhgorod.ua",
  "zhitomir.ua",
  "fukushima.jp",
  "yamanashi.jp",
  "hiroshima.jp",
  "yamaguchi.jp",
  "tokushima.jp",
  "kagoshima.jp",
  "folkebibl.no",
  "bialystok.pl",
  "cherkassy.ua",
  "chernigov.ua",
  "parliament.cy",
  "kitakyushu.jp",
  "fylkesbibl.no",
  "chernovtsy.ua",
  "kirovograd.ua",
  "sebastopol.ua",
  "parliament.uk",
  "zaporizhzhe.ua",
  "khmelnitskiy.ua",
  "naturbruksgymn.se",
  "dnepropetrovsk.ua",
  "kommunalforbund.se",
  "ivano-frankivsk.ua",
  "british-library.uk",
  "national-library-scotland.uk",
] ;

return tld.includes(url) ;
}


It loops through the parts of a full hostname and tries to set a cookie on that domain, it will set a cookie at the highest level possible. This function is helpful if you are trying to set the cookie in the base domain

Note: test this code in the respective website browser console, otherwise doesn't work.

function getDomain () {
        var domain =document.domain;
        var i = 0;
        var parts = domain.split('.');
        var value = 'km_' + (new Date()).getTime();
        while (i < (parts.length - 1) && document.cookie.indexOf(value + '=' + value) == -1) {
            domain = parts.slice(-1 - (++i)).join('.');
            document.cookie = value + "=" + value + ";domain=" + domain + ";";
        }
        document.cookie = value + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;domain=" + domain + ";";
        return domain
}


I think the code below will work for most of the simple domain names.

function getTLD() {
    const hostname = window.location.hostname;
    const hostnameArray = hostname.split('.');
    if (hostnameArray.length === 1) return hostname;
    let i = 0;
    for (i = hostnameArray.length - 1; i > -1; i--) {
        if (hostnameArray[i].length > 2 && i !== hostnameArray.length - 1) {
            break;
        }
    }
    let tldArray = [];
    for (let j = i; j < hostnameArray.length; j++) {
        tldArray.push(hostnameArray[j]);
    }
    return tldArray.join('.');
}


Just just this java script function:

  <script>

    function RedirectUrl() {
      var domain= window.location.hostname;
      var re=/[-\w]+\.(?:[-\w]+\.xn--[-\w]+|[-\w]{3,}|[-\w]+\.[-\w]{2})$/i;
      var Topdomain = re.exec(domain);
      return Topdomain;
    }
    </script>


I had to deal with this today and I settled on:

'www.images.google.co.in'.match(/[^.\s\/]+\.([a-z]{3,}|[a-z]{2}.[a-z]{2})$/)[0]
//=> google.co.in

Note that the rules have changed since many of these answers were submitted.


(function (){
    var d = document.domain.split('.');
    var i = d.indexOf('google'); 
    return d.slice(i).join('.');
})();


How to get base domain from the URL in JavaScript

document.location.origin

Result: "https://stackoverflow.com"

And sometimes you might also want these:

document.location.hostname

Result: "stackoverflow.com"

document.location.pathname

Result: "/questions/6449340/how-to-get-base-domain-from-the-url-in-javascript/58887093"

0

精彩评论

暂无评论...
验证码 换一张
取 消