499 Stimmen

location.host vs. location.hostname und cross-browser Kompatibilität?

Welche dieser Möglichkeiten ist am effektivsten, um zu prüfen, ob der User Agent über die richtige Domain zugreift?

Wir würden gerne eine kleine js-basierte Warnung im Stil einer Top Bar anzeigen, wenn sie über eine Art Web-Proxy auf die Domain zugreifen (da dies dazu neigt, die js zu unterbrechen).

Wir dachten an die Verwendung des Folgenden:

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

Damit wären alle Subdomains, die wir jemals verwenden werden, abgedeckt.

Was soll man verwenden: host oder hostname?

In Firefox 5 und Chrome 12:

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

zeigt für beide das Gleiche.

Liegt das daran, dass der Port nicht in der Adressleiste steht?

W3Schulen sagt, dass der Host den Anschluss enthält.

Sollte location.host/hostname validiert werden oder können wir ziemlich sicher sein, dass er im IE6+ und allen anderen existiert?

1396voto

abernier Punkte 25010

interactive link anatomy

Als kleines Memo: die interaktive Verbindung Anatomie

--

Kurz gesagt (unter der Annahme eines Standorts von http://example.org:8888/foo/bar#bang ):

  • hostname gibt Ihnen example.org
  • host gibt Ihnen example.org:8888

78voto

jfriend00 Punkte 632952

Host enthält nur die Portnummer, wenn eine angegeben ist. Wenn in der URL keine Portnummer angegeben ist, wird dasselbe zurückgegeben wie bei hostname. Sie entscheiden, ob Sie die Portnummer abgleichen wollen oder nicht. Siehe https://developer.mozilla.org/en/window.location für weitere Informationen.

Ich gehe davon aus, dass Sie hostname benötigen, um nur den Namen der Website zu erhalten.

37voto

Kenneth Palaganas Punkte 1757

Wenn Sie darauf bestehen, die window.location.origin Sie können dies an den Anfang Ihres Codes stellen, bevor Sie die origin

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, es war eigentlich die ursprüngliche Frage. Sie wurde bereits bearbeitet :)

10voto

bluesmoon Punkte 3709

Ihre Hauptfrage wurde bereits oben beantwortet. Ich wollte nur darauf hinweisen, dass die von Ihnen verwendete Regex einen Fehler hat. Sie wird auch erfolgreich sein bei foo-domain.com die keine Unterdomäne von domain.com

Was Sie wirklich wollen, ist dies:

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

4voto

Igor Dymov Punkte 15980

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

Es scheint, dass Sie bei beiden das gleiche Ergebnis erhalten, aber hostname enthält einen eindeutigen Hostnamen ohne Klammern oder eine Portnummer.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X