emplacement.hôte vs emplacement.nom d'hôte et compatibilité entre navigateurs?


Lequel d'entre eux est le plus efficace vs vérifier si l'agent utilisateur accède via le domaine correct.

Nous aimerions afficher un petit avertissement de style "barre supérieure" basé sur js s'ils accèdent au domaine en utilisant une sorte de proxy Web (car il a tendance à casser le js).

Nous pensions utiliser ce qui suit:

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

Qui prendrait soin de tous les sous-domaines que nous utilisons.

Qui devrions-nous utiliser l'hôte ou le nom d'hôte?

Dans Firefox 5 et Chrome 12:

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

.. montre le même pour les deux.

Est-ce parce que le port n'est pas réellement dans la barre d'adresse?

W3Schools indique que host contient le port.

Devrait emplacement.hôte / nom d'hôte être validé ou pouvons-nous être à peu près certains dans IE6+ et tous les autres il existera?

Author: Druzion, 2011-07-17

6 answers

lien interactif anatomie

Comme un petit mémo: le lien interactif anatomie

--

En bref (en supposant un emplacement de http://example.org:8888/foo/bar#bang):

  • hostname vous donne example.org
  • host vous donne example.org:8888
 843
Author: abernier, 2018-02-14 15:02:20

Host inclut simplement le numéro de port s'il y en a un spécifié. S'il n'y a pas de numéro de port spécifiquement dans l'URL, il renvoie le même nom d'hôte. Vous choisissez si vous souhaitez faire correspondre le numéro de port ou non. Voir https://developer.mozilla.org/en/window.location pour plus d'informations.

Je suppose que vous voulez que le nom d'hôte obtienne simplement le nom du site.

 67
Author: jfriend00, 2011-07-17 18:37:24

Si vous insistez pour utiliser le window.location.origin Vous pouvez le mettre en haut de votre code avant de lire le origin

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

Solution

PS: Pour mémoire, c'était en fait la question initiale. Ils ont probablement modifié il déjà. :)

 27
Author: Kenneth Palaganas, 2018-08-29 12:46:26

Votre question principale a été répondue ci-dessus. Je voulais juste souligner que l'expression régulière que vous utilisez a un bogue. Il réussira également sur foo-domain.com qui n'est pas un sous-domaine de domain.com

Ce que vous voulez vraiment, c'est ceci:

/(^|\.)domain\.com$/
 9
Author: bluesmoon, 2014-02-25 05:01:09

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

Il semble que vous obtiendrez le même résultat pour les deux, mais hostname contient un nom d'hôte clair sans crochets ni numéro de port.

 3
Author: Igor Dymov, 2011-07-17 18:39:20

Juste pour ajouter une note que le navigateur Google Chrome a l'attribut origin pour l'emplacement. ce qui vous donne le domaine entier du protocole au numéro de port, comme indiqué dans la capture d'écran ci-dessous. outil de développement chrome

 0
Author: Gopi P, 2018-07-31 10:38:21