Holen Sie sich den aktuellen Domainnamen mit Javascript (nicht den Pfad usw.)


245

Ich plane, zwei Domainnamen für dieselbe Site zu kaufen. Je nachdem, welche Domain verwendet wird, plane ich, leicht unterschiedliche Daten auf der Seite bereitzustellen. Gibt es eine Möglichkeit für mich, den tatsächlichen Domainnamen zu ermitteln, von dem die Seite geladen wird, damit ich weiß, in was ich meinen Inhalt ändern soll?

Ich habe mich nach solchen Dingen umgesehen, aber das meiste funktioniert nicht so, wie ich es möchte.

Zum Beispiel bei der Verwendung

document.write(document.location)

auf JSFiddle wird zurückgegeben

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

dh der tatsächliche Weg oder was auch immer das ist.


1
Ich bin nicht sicher, ob ich genau verstehe, was Sie tun möchten, aber Sie sollten wahrscheinlich einen Blick in MDN in Bezug auf dies werfen
MilkyWayJoe

Ein bisschen Thema, aber Sie könnten auch Subdomains anstelle von zwei separaten Domainnamen in Betracht ziehen. So etwas wie premium.random.comundfree.random.com
T.Chmelevskij

Antworten:


454

Wie wäre es mit:

window.location.hostname

Das locationObjekt verfügt tatsächlich über eine Reihe von Attributen, die sich auf verschiedene Teile der URL beziehen


55
und window.location.hostnamewenn Sie nicht wollen, die port(wie http://localhost:3000/, window.location.host = 'localhost:3000'undwindow.location.hostname = 'localhost'
Guilherme

6
Die Antwort ist falsch, da der Port nicht zur Domäne gehört. Und window.location.hostwird manchmal den Hafen zurückgeben.
Andrej

4
Dies gibt auch den Servernamen zurück ('www.amazingjokes.com', anstatt nur '.amazingjokes.com')
Patrick

Wenn Sie DNS weiterleiten, benötigen Sie möglicherweise dieses - window.location.ancestorOrigins
Kirill Gusyatin

123

Versuchen Sie, im Skript auszuführen: Pfad: http: // localhost: 4200 / Landung? Query = 1 # 2

console.log(window.location.hash)

Der Standort hat folgende Werte:

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
Das ist so eine tolle Antwort!
Andrew Campbell

2
Ich liebe Antworten mit mehreren Beispielen. Vielen vielen Dank.
Magno Alberto

24

Wenn Sie nicht am Hostnamen (zum Beispiel www.beta.example.com), sondern am Domainnamen (zum Beispiel example.com) interessiert sind , funktioniert dies für gültige Hostnamen:

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

13
Falsch, dies wird auf fast allen internationalen TLDs brechen.
Tbranyen

4
@tbranyen kannst du erklären, worauf du dich beziehst? Der einzige Fall, an den ich denken kann, sind Subdomains wie amazon.co.uk. Aber definitiv nicht "fast alle internationalen TLDs". Tatsächlich funktioniert es mit 100% der in Wikipedia gefundenen Ländercodes
cprcrack

1
cprcrack aus irgendeinem Grund dachte ich, dass mehr internationale (nach Amerika) tlds mehrere Punkte enthielten. Danke für die Korrektur!
Branyen

Eine Reihe von Ländern arbeiten ähnlich wie Großbritannien: Sie haben feste Domains der zweiten Ebene, und Sie können Domains nur auf der dritten Ebene registrieren. Eine Liste dieser Länder finden Sie auf Wikipedia .
Gareth

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

Beispiele

In der vorherigen Version wurde die vollständige Domain (einschließlich der Subdomain) abgerufen. Jetzt wird je nach Präferenz die richtige Domain ermittelt. Wenn also ein zweites Argument als wahr angegeben wird, enthält es die Unterdomäne, andernfalls wird nur die 'Hauptdomäne' zurückgegeben.


1
Dies sollte die Antwort sein, es funktioniert sogar in localhost/test.phpund dass die richtige Antwort localhost.
Mohammad AlBanna

Es ist auch die beste Antwort, weil es mit jeder URL funktioniert, die Sie übergeben, nicht nur mit dem aktuellen window.location
sohtimsso1970

Wenn Sie dies tun, erhalten google.co.ukSie "co.uk" zurück, was nicht korrekt ist ...
James Douglas

Ja. Das ist eine knifflige Angelegenheit. Noch schwieriger, wenn Sie auch Subdomains haben (wie: test.google.co.uk). Wenn Sie diese Rohversion verwenden möchten, sind einige ernsthafte Anpassungen erforderlich (möglicherweise sogar Hinzufügen einer speziellen Liste für diese tlds).
Adelineu

10

Sie können es einfach vom Standortobjekt in Javascript erhalten:

Die URL dieser Seite lautet beispielsweise:

http://www.stackoverflow.com/questions/11401897/get-the-current-domain-name-with-javascript-not-the-path-etc

Dann können wir die genaue Domäne mit den folgenden Eigenschaften des Standortobjekts erhalten:

location.host = "www.stackoverflow.com"
location.protocol= "http:"

Sie können die vollständige Domain erstellen mit:

location.protocol + "//" + location.host

Was in diesem Beispiel zurückkehrt http://www.stackoverflow.com

Außerdem können wir die vollständige URL und auch den Pfad mit anderen Eigenschaften des Standortobjekts erhalten:

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

Wenn Sie nur an dem Domainnamen interessiert sind und die Subdomain ignorieren möchten, müssen Sie sie aus hostund heraus analysieren hostname.

Der folgende Code macht das:

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/


Warum wird jShell anstelle von jsFiddle zurückgegeben?
Freesnöw

2
@ XanderLamkins: Es ist ein Iframe : jsfiddle.net/5U366 <-> fiddle.jshell.net/5U366/show
Saxoier

7

Da diese Frage nach dem Domainnamen und nicht nach dem Hostnamen fragt , sollte eine korrekte Antwort lauten

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

Dies funktioniert auch für Hostnamen wie www.example.com .


1
Dies funktioniert, funktioniert aber nicht mit Domains wie domain.co.uk, domain.com.br .. Wie kann ich dafür sorgen, dass es mit jeder Domain funktioniert?
Sameh

6

Verwenden

document.write(document.location.hostname)​

window.locationhat eine Reihe von Eigenschaften. Siehe hier für eine Liste von ihnen.


5

Wenn Sie einen vollständigen Domain-Ursprung wünschen, können Sie Folgendes verwenden:

document.location.origin

Und wenn Sie nur die Domain erhalten möchten, können Sie Folgendes verwenden:

document.location.hostname

Sie haben aber noch andere Möglichkeiten. Schauen Sie sich die Eigenschaften an in:

document.location

5

Was ist mit dieser Funktion?

window.location.hostname.match(/\w*\.\w*$/gi)[0]

Dies stimmt nur mit dem Domainnamen überein, unabhängig davon, ob es sich um eine Subdomain oder eine Hauptdomain handelt


1
Ich mag diese Antwort. Sie sollten sich jedoch bewusst sein, dass es umgangen werden kann, wenn es für sicherheitsrelevante Zwecke verwendet wird. Wenn Sie also sicherstellen möchten, dass Sie sich auf example.com befinden, entspricht hacker-example.com auch 'example.com'. window.location.hostname.match (/ [a-zA-Z0-9 -] * \. [a-zA-Z0-9 -] * $ /) [0] funktioniert.
Hiburn8

4

Wenn Sie einen Domainnamen in JavaScript erhalten möchten, verwenden Sie einfach den folgenden Code:

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

Wenn Sie den URL-Pfad der Webseite benötigen, um auf den Pfad der Web-URL zugreifen zu können, verwenden Sie dieses Beispiel:

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


1

Ich bin neu in JavaScript, kann aber nicht einfach Folgendes verwenden: document.domain ?

Beispiel:

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

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

Ausgabe:

domain.com

oder

www.domain.com

Je nachdem, was Sie auf Ihrer Website verwenden.


0

Ich denke, es sollte so einfach sein:

url.split("/")[2]


Funktioniert bei mir. Die vorherigen Lösungen basieren auf Dokumenten-, Speicherort- oder Fensterobjekten.
Krise

0

Wenn ich ein paar Antworten aus dem oben Gesagten kombiniere, funktioniert das Folgende für mich sehr gut, um Cookies zu zerstören:

  /**
   * 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]}`;
  }

Funktioniert für IP-Adressen mit Ports, z. B. 0.0.0.0:8000 usw., sowie für komplexe Domänen wie die app.staging.example.comRückgabe .example.com=> ermöglicht das domänenübergreifende Setzen und Zerstören von Cookies.


0

Wenn Sie den Länderdomainnamen möchten - zum Beispiel, um .com zu extrahieren    Länderdomänenname von stackoverflow.com extrahiert:

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

Verwenden Sie dann einfach die Funktion, um den Wert einer Variablen zuzuweisen:

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

In der Tat funktionierte für mich, während ich PHP nicht verwenden konnte

Ich habe gerade getestet, dass es dank des oben in einigen Antworten erwähnten Ansatzes funktioniert hat, so schnell und verifiziert, dass es funktioniert hat


@Brandito Danke, nun, diese Site wurde auf einem virtuellen AWS-Host gehostet, von dem ich glaube, dass sie WordPress verwendet, und ich weiß nicht, warum es Probleme gab, dies auf diese Weise zu tun ... Ich bin mir nicht sicher, ob es eine falsche Umleitung war oder etwas, das dazu führen musste mit den Regeln für das Umschreiben des Backend-Mods. Außerdem wollte ich einen Toolquip und ein Symbol zum Thema jquery ui verwenden. Zunächst vom Kunden genehmigt: '-)
Jean Paul AKA el_vete
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.