location.host vs location.hostname și compatibilitatea între browsere? (Programare, Javascript, Html, Fereastră, Locație, Gazdă)

anonymous-one a intrebat.

Care dintre acestea este cel mai eficient pentru a verifica dacă agentul utilizatorului accesează prin intermediul domeniului corect.

Am dori să afișăm un mic avertisment de tip „top bar” bazat pe js dacă accesează domeniul folosind un fel de proxy web (deoarece tinde să rupă js-ul).

Ne gândeam să folosim următoarele:

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

Asta ar avea grijă de orice subdomeniu pe care îl folosim vreodată.

Care ar trebui să folosim host sau hostname?

În Firefox 5 și Chrome 12:

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

… arată la fel pentru ambele.

Este din cauză că portul nu este de fapt în bara de adrese?

W3Schools spune că host conține portul.

Ar trebui validat location.host/hostname sau putem fi destul de siguri că în IE6+ și în toate celelalte există?

Comentarii

  • Un lucru de reținut este că Google Chrome are un location.origin, în timp ce MSIE și Firefox nu au. developer.mozilla.org/En/Window.locationmsdn.microsoft.com/en-us/library/ms952653.aspx –  > Por Keyo.
  • A se vedea, de asemenea: Care este diferența dintre window.location.host și window.location.hostname –  > Por hippietrail.
  • posibil duplicat al Whats the difference between window.location.host and window.location.hostname –  > Por Ankur.
6 răspunsuri
abernier

Ca un mic memento: în anatomia legăturii interactive

Pe scurt (presupunând o locație de http://example.org:8888/foo/bar#bang):

  • hostname vă oferă example.org
  • host vă oferă example.org:8888

Comentarii

    125

  • O imagine face cât o mie de cuvinte. –  > Por Jack Giffin.
  • @lolzerywowzery … dar numai acele mii de cuvinte necesare pentru a descrie imaginea –  > Por Agi Hammerthief.
  • Conform ro.wikipedia.org/wiki/…, , portul nu ar trebui să fie considerat o parte a gazdei (dar este o parte a autorității). –  > Por Alec.
  • @Alec, aceasta este o notă tehnică interesantă; dacă se cercetează citatul din Wikipedia, se constată că, în conformitate cu RFC 3986, „autoritate” ar trebui să fie termenul pentru concatenarea numelui de gazdă, :, și port. Mă întreb cât de mult din discuție este încă disponibilă din momentul în care location.host era în curs de formulare… Bănuiesc că astăzi se numește astfel pentru că nimeni dintre cei prezenți nu a citit sau nu s-a gândit să menționeze acel RFC. –  > Por JamesTheAwesomeDude.
  • Vă mulțumesc foarte mult pentru soluția simplă –  > Por Tarun Nagpal.
jfriend00

gazdă include doar numărul de port dacă există unul specificat. Dacă nu există un număr de port specificat în URL, atunci returnează același lucru ca și hostname. Alegeți dacă vă interesează să potriviți numărul de port sau nu. A se vedea https://developer.mozilla.org/en/window.location pentru mai multe informații.

Presupun că doriți ca hostname să obțină doar numele site-ului.

Kenneth Palaganas

Dacă insistați să utilizați window.location.originPuteți pune acest lucru în partea de sus a codului dvs. înainte de a citi origin

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

Soluție

PS: Pentru înregistrare, aceasta a fost de fapt întrebarea inițială. A fost deja editată 🙂

Comentarii

  • But…. OP nu a menționat niciodată window.location.origin în întrebarea lor. Întrebarea lor se referea de fapt în mod special la lucruri care sunt nu window.location.origin. –  > Por Winderps.
  • De asemenea, este de remarcat faptul că window.location.origin are probleme de compatibilitate cu browserele. developer.mozilla.org/en-US/docs/Web/API/Window/… –  > Por Scott.
bluesmoon

Întrebarea dvs. primară a primit răspuns mai sus. Am vrut doar să subliniez faptul că regex-ul pe care îl folosiți are o eroare. De asemenea, va reuși pe foo-domain.com care nu este un subdomeniu al domain.com

Ceea ce vrei cu adevărat este acest lucru:

/(^|.)domain.com$/

Igor Dymov

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

Se pare că veți obține același rezultat pentru ambele, dar hostname conține clar numele de gazdă fără paranteze sau numărul de port.

Gopi P

Doar pentru a adăuga o notă că browserul Google Chrome are atributul origin pentru locație. care vă oferă întregul domeniu de la protocol la numărul de port, așa cum se arată în captura de ecran de mai jos.