2012-05-02 16 views
6

Ci sono molte domande su SO che sembrano affrontare le variazioni di questa domanda. Ma tendono ad essere risposte regex complesse e spero di trovare qualcosa di più semplice.Ottieni il dominio principale da location.host

valori location.host Attribuite di

foo.mysite.com 
app.foo.mysite.com 
mysite.com 

Come posso ottenere il dominio principale mysite.com?

Potrei fare qualcosa come trovare il penultimo ., ma questo sembra brutto e non funzionerebbe per nessun TLD come .co.uk. Se jQuery ha un oggetto che contiene queste informazioni sono felice di usarlo.

Il mio obiettivo è creare cookie esistenti in tutti i sottodomini. Per fare questo ho bisogno di trovare .mysite.com. Preferirei non codificarlo.

+0

data una lista di validi TLD non dovrebbe essere difficile - invece del penultimo '.' vuoi il primo' .' (readin g da destra a sinistra) dopo il TLD. Si potrebbe fare questo con una grande regexp o un ciclo, ma quest'ultimo in genere sarebbe meno efficiente. – jimw

+0

Un elenco completo può essere trovato qui: http://publicsuffix.org/ Se si utilizza una regex o in qualche altro modo non farò molta differenza, suppongo. In ogni caso è necessario considerare tutti i TLD e gli SLD pubblici. Dai un'occhiata a http://stackoverflow.com/questions/4452916/need-a-regular-expression-to-capture-second-level-domain-sld. –

+0

C'è un progetto per farlo all'indirizzo https://github.com/riffraff/publicsuffix.js ma si dice che sia "rotto". Non l'ho provato ma potrebbe costituire la base per la tua soluzione. –

risposta

7

Data la bassissima probabilità che il nostro dominio sarebbe mai cambiato da qualcosa di diverso da .com, per non parlare di uno SLD, ho codificato qualcosa di simile in .

var temp = location.host.split('.').reverse(); 
var root_domain = '.' + temp[1] + '.' + temp[0]; 

l'overhead e la manutenzione di mantenimento di un dominio di primo livello o di un elenco SLD e il confronto contro di essa non vale il compromesso per noi.

+0

[libreria tldjs] (https://www.npmjs.com/package/tldjs) può essere utilizzato se si desidera evitare da soli la manutenzione.È basato sull'elenco suffisso pubblico di Mozilla –

3

Non è possibile chiamare .co.uk come TLD. In realtà è un second level domain. Quindi sarà sempre ambiguo che cos'è il dominio di root.
Tuttavia è possibile elencare tutti i domini TLD e di secondo livello disponibili e cercare di trovare una corrispondenza. Ma sarà un'operazione molto costosa e noiosa.
Se si vuole fare questo, questo List of TLDs and SLDs potrebbe essere utile:

1

se lo vuoi tutto su una riga -

document.domain.split('.').reverse().splice(0,2).reverse().join('.') 

o

location.hostname.split('.').reverse().splice(0,2).reverse().join('.') 

per gli ingressi: 'foo.example.com', 'foo.bar.example.com', 'foo.bar.fizz.buzz.example.com'

tornerà: 'example.com'

+0

Non funziona, ad esempio, per i domini 'co.uk'. –

Problemi correlati