miejsce.host vs lokalizacja.Nazwa hosta i kompatybilność między przeglądarkami?

Który z nich jest najskuteczniejszy w porównaniu do sprawdzania, czy agent użytkownika uzyskuje dostęp przez właściwą domenę.

Chcielibyśmy pokazać małe ostrzeżenie w stylu "top bar" oparte na js, jeśli uzyskują dostęp do domeny za pomocą jakiegoś internetowego proxy (ponieważ ma tendencję do łamania js).

Myśleliśmy o użyciu:

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

To zajmie się każdą subdomeną, z której korzystamy.

Którego hosta lub nazwę hosta powinniśmy użyć?

W Firefoksie 5 i Chrome 12:

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

.. pokazuje to samo dla obu.

To dlatego, że port nie znajduje się w pasku adresu?

W3Schools mówi, że host zawiera port.

Powinna lokalizacja.host / Nazwa hosta zostanie zweryfikowana, czy możemy być pewni, że w IE6+ i wszystkich innych będzie istnieć?

Author: Druzion, 2011-07-17

6 answers

Interactive link

Jako mała notka: interaktywny link

--

W skrócie (zakładając położenie http://example.org:8888/foo/bar#bang):

  • hostname daje example.org
  • host daje example.org:8888
 843
Author: abernier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-14 15:02:20

Host zawiera tylko numer portu, jeśli jest określony. Jeśli w adresie URL nie ma konkretnego numeru portu, to zwraca on taki sam jak nazwa hosta. Sam wybierasz, czy chcesz dopasować numer portu, czy nie. Zobacz https://developer.mozilla.org/en/window.location aby uzyskać więcej informacji.

Zakładam, że chcesz, aby nazwa hosta po prostu dostać nazwę strony.

 67
Author: jfriend00,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-17 18:37:24

Jeśli nalegasz na użycie window.location.origin Możesz umieścić to w górnej części kodu przed przeczytaniem origin

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

Rozwiązanie

PS: dla przypomnienia, to było oryginalne pytanie. Pewnie już to zmontowali. :)

 27
Author: Kenneth Palaganas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-29 12:46:26

Twoje podstawowe pytanie zostało udzielone powyżej. Chciałem tylko zaznaczyć, że regex, którego używasz, ma błąd. Uda się również na foo-domain.com, która nie jest subdomeną domain.com

To czego naprawdę chcesz to:

/(^|\.)domain\.com$/
 9
Author: bluesmoon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-25 05:01:09

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

Wydaje się, że otrzymasz ten sam wynik dla obu, ale hostname zawiera przejrzystą nazwę hosta bez nawiasów i numeru portu.

 3
Author: Igor Dymov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-17 18:39:20

Wystarczy dodać uwagę, że przeglądarka Google Chrome ma atrybut origin dla lokalizacji. co daje całą domenę od protokołu do numeru portu, jak pokazano na poniższym zrzucie ekranu. chrome developers tool

 0
Author: Gopi P,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-31 10:38:21