wake-up-neo.net

location.Host vs. location.hostname und Cross-Browser-Kompatibilität?

Welche davon ist am effektivsten, wenn Sie überprüfen, ob der Benutzeragent über die richtige Domäne zugreift.

Wir möchten eine kleine js-basierte Topbar-Warnung anzeigen, wenn sie über eine Art Web-Proxy auf die Domäne zugreifen (da dies dazu neigt, die js zu brechen).

Wir haben über folgendes nachgedacht:

var r = /.*domain\.com$/;
if (r.test(location.hostname)) {
    // showMessage ...
}

Das würde für alle Subdomains sorgen, die wir jemals benutzen.

Welchen sollten wir Host oder Hostname verwenden?

In Firefox 5 und Chrome 12:

console.log(location.Host);
console.log(location.hostname);

.. zeigt dasselbe für beide.

Liegt das daran, dass sich der Port nicht tatsächlich in der Adressleiste befindet?

W3Schools sagt, der Host enthält den Port.

Sollte location.Host/hostname validiert werden oder können wir in IE6 + und allen anderen, die es gibt, ziemlich sicher sein?

306
anonymous-one

 interactive link anatomy

Als kleines Memo: die interaktive Link-Anatomie

-

Kurz gesagt (vorausgesetzt, ein Ort von http://example.org:8888/foo/bar#bang):

  • hostname gibt Ihnen example.org
  • Host gibt Ihnen example.org:8888
895
abernier

Der Host enthält nur die Portnummer, wenn eine angegeben ist. Wenn die URL keine Portnummer enthält, wird der Hostname zurückgegeben. Sie wählen, ob Sie die Portnummer abgleichen möchten oder nicht. Siehe https://developer.mozilla.org/en/window.location für weitere Informationen.

Ich würde davon ausgehen, dass Sie möchten, dass der Hostname nur den Site-Namen erhält.

68
jfriend00

Wenn Sie darauf bestehen, den window.location.Origin zu verwenden, können Sie diesen in Ihren Code einfügen, bevor Sie die Origin lesen

if (!window.location.Origin) {
  window.location.Origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
}

Lösung 

PS: Für das Protokoll war es eigentlich die ursprüngliche Frage. Sie haben es wahrscheinlich schon bearbeitet. :)

28

Ihre Hauptfrage wurde oben beantwortet. Ich wollte nur darauf hinweisen, dass die Regex, die Sie verwenden, einen Fehler hat. Es wird auch auf foo-domain.com gelingen, die keine Unterdomäne von domain.com ist.

Was Sie wirklich wollen, ist folgendes:

/(^|\.)domain\.com$/
9
bluesmoon

MDN: https://developer.mozilla.org/de/DOM/window.location

Es scheint, dass Sie für beide das gleiche Ergebnis erhalten, aber hostname enthält einen eindeutigen Hostnamen ohne Klammern oder Portnummern.

3
Igor Dymov

Fügen Sie einfach eine Notiz hinzu, dass der Google Chrome-Browser das Attribut Origin für den Standort hat. Dies gibt Ihnen die gesamte Domäne vom Protokoll bis zur Portnummer, wie in der Abbildung unten gezeigt.  chrome developers tool

0
Gopi P