location.host vs location.hostname ve tarayıcılar arası uyumluluk?


365

Bunlardan hangisi, kullanıcı aracının doğru etki alanı üzerinden erişip erişmediğini kontrol etmede en etkili yöntemdir.

Biz bir tür web proxy kullanarak (js kırmak eğilimindedir) etki alanına erişiyorsanız, küçük bir js tabanlı 'üst çubuk' tarzı uyarı göstermek istiyoruz.

Aşağıdakileri kullanmayı düşünüyorduk:

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

Bu, şimdiye kadar kullandığımız alt alan adlarıyla ilgilenir.

Ana bilgisayar veya ana bilgisayar adını kullanmalıyız?

Firefox 5 ve Chrome 12'de:

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

.. her ikisi için de aynı şeyi gösterir.

Bağlantı noktası aslında adres çubuğunda olmadığı için mi?

W3Schools , ana bilgisayarın bağlantı noktasını içerdiğini söylüyor.

Location.host/hostname doğrulanmalı mı yoksa IE6 + 'da ve diğer tüm sistemlerde oldukça emin olabilir miyiz?


6
Unutulmaması gereken bir nokta, google chrome'un MSIE ve Firefox'un bulunmadığı bir location.origin olmasıdır. developer.mozilla.org/En/Window.location - msdn.microsoft.com/en-us/library/ms952653.aspx
Keyo


Yanıtlar:


1063

etkileşimli bağlantı anatomisi

Küçük bir not: etkileşimli bağlantı anatomisi

-

Kısacası (bulunduğu yeri varsayarak http://example.org:8888/foo/bar#bang):

  • hostname sana verir example.org
  • host sana verir example.org:8888

87
Bir resim bin kelime değerinde bir olup.
Jack Giffin

4
@lolzerywowzery ... ama resmi tanımlamak için gereken sadece bin kelime
Agi Hammerthief

1
En.wikipedia.org/wiki/… 'a göre , liman ev sahibinin bir parçası olarak düşünülmemelidir (ancak otoritenin bir parçasıdır).
Alec

@Alec bu ilginç bir teknik not; Vikipedi alıntısının sonlandırılması, RFC 3986'ya göre "otoritenin" ana bilgisayar adı ve bağlantı noktasının birleştirilmesi için bir terim olması gerektiğini ortaya koymaktadır :. Tartışmanın ne kadarının location.hostformüle edildiğinden itibaren hala mevcut olduğunu merak ediyorum ... Bugün böyle adlandırıldığından şüpheleniyorum çünkü mevcut hiç kimse RFC'yi okumadı veya bahsetmedi.
JamesTheAwesomeDude

Basit çözüm için çok teşekkür ederim
Tarun Nagpal

70

ana bilgisayar yalnızca bir tane varsa bağlantı noktası numarasını içerir. URL'de özel olarak bir bağlantı noktası numarası yoksa, ana bilgisayar adıyla aynı döndürür. Bağlantı noktası numarasıyla eşleşip eşleşmeyeceğinizi siz seçersiniz. Daha fazla bilgi için https://developer.mozilla.org/en/window.location adresine bakın .

Ana bilgisayar adının site adını almasını istediğinizi varsayarım.


33

window.location.origin Kullanmak için ısrar ediyorsanız, bunu okumadan önce kodunuzun üstüne koyabilirsiniz.origin

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

Çözüm

PS: Kayıt için aslında asıl soru buydu. Zaten düzenlendi :)


5
Ama .... OP window.location.originsorularında hiç bahsetmedi . Soruları aslında olmayan şeyler ile ilgiliydiwindow.location.origin .
Sarıcılar

1
Window.location.origin'in tarayıcı uyumluluk sorunları olduğunu da belirtmek gerekir. developer.mozilla.org/tr-TR/docs/Web/API/Window/…
Scott

10

Birincil sorunuz yukarıda cevaplandı. Sadece kullandığınız normal ifadenin bir hata olduğunu belirtmek istedim. Ayrıca, foo-domain.combir alt etki alanı olmayandomain.com

Gerçekten istediğin şu:

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


0

Google Chrome tarayıcısının konum için kaynak özelliğine sahip olduğunu unutmayın. bu, aşağıdaki ekran görüntüsünde gösterildiği gibi, tüm etki alanını protokolden bağlantı noktası numarasına verir. krom geliştiricileri aracı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.