jak uzyskać adres URL hosta za pomocą javascript z bieżącej strony

182

Biorąc pod uwagę, że jestem na następującej stronie:

http://www.webmail.com/pages/home.aspx

Jak mogę odzyskać nazwę hosta ( "http://www.webmail.com") za pomocą JavaScript?

karthik k
źródło
3
możliwy duplikat Pobierz nazwę hosta w JavaScript
T.Todua

Odpowiedzi:

318
var host = window.location.hostname;

lub ewentualnie

var host = "http://"+window.location.hostname;

lub jeśli lubisz konkatenację

var protocol = location.protocol;
var slashes = protocol.concat("//");
var host = slashes.concat(window.location.hostname);
Eric Herlitz
źródło
3
Może nie precyzuj http. Użyj protokołu względnego. Może być bardziej odpowiednie niż kodowanie na stałe.
Darth Egregious
33
Użyj window.location.host zamiast nazwy hosta, inaczej zakończy się niepowodzeniem, jeśli port nie ma 80.
Stefan Steiger
1
@MattBrowne Pracując z czymś, co powinno wytworzyć ciąg, powiedziałbym, że zawsze powinieneś go używać concat. W przykładzie var a = 1 + 2 + " should be 12";vs wersja konkat tego var a = "".concat(1).concat(2).concat(" should be 12");. Korzystanie z konkat pozwoli ci zaoszczędzić wiele problemów +związanych z obliczeniami, a nie konkatenacją.
Eric Herlitz,
3
hostnamepoda tylko domenę i hostzapewni również port. To świetne mini narzędzie do obejrzenia anatomii linków bl.ocks.org/abernier/3070589
Lukas Liesis
4
window.location.origin również działa dobrze - zawiera protokół i port.
rothschild86
96

Aby uzyskać nazwę hosta: location.hostname

Ale twój przykład również szuka schematu, więc location.originwydaje się robić to, co chcesz w Chrome, ale nie pojawia się w dokumentach Mozdeva. Możesz to zbudować za pomocą

location.protocol + '//' + location.hostname

Jeśli chcesz również numer portu (jeśli nie jest to 80), to:

location.protocol + '//' + location.host
Quentin
źródło
Wydaje się, że Firefox 4 go nie ma, chociaż Chrome 12 tak. Czy jest to zdefiniowane w specyfikacji?
Delan Azabani,
Cześć .. Dla uzyskania portu, przykład działał jak urok .. Dzięki za to
karthik k
FF obsługuje location.origin od 21.0: developer.mozilla.org/en-US/docs/Web/API/Window.location
zifot
67

Możesz uzyskać protokół, host i port, używając tego:

window.location.origin

Kompatybilność z przeglądarkami

Pulpit

| Chrome                           | Edge  | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit)                            |
|----------------------------------|-------|-----------------|-------------------|-------|--------------------------------------------|
| (Yes)                            | (Yes) | (Yes)           | (Yes)             | (Yes) | (Yes)                                      |
| 30.0.1599.101 (possibly earlier) | ?     | 21.0 (21.0)     | 11                | ?     | 7 (possibly earlier, see webkit bug 46558) |

mobilny

| Android                          | Edge  | Firefox Mobile (Gecko) | IE Phone | Opera Mobile | Safari Mobile                              |
|----------------------------------|-------|------------------------|----------|--------------|--------------------------------------------|
| (Yes)                            | (Yes) | (Yes)                  | (Yes)    | (Yes)        | (Yes)                                      |
| 30.0.1599.101 (possibly earlier) | ?     | 21.0 (21.0)            | ?        | ?            | 7 (possibly earlier, see webkit bug 46558) |

Cała kompatybilność przeglądarki pochodzi z Mozilla Developer Network

Monso
źródło
4
Powinienem wspomnieć, że IE tego nie obsługuje.
Monso,
Proszę wspomnieć, że jest to nowa funkcja, która nie jest obsługiwana przez stare przeglądarki.
kabirbaidhya
@kabirbaidhya Co powiesz na pełną kompatybilność!
Monso,
Dobry. Ale co się stanie, gdy faceci MDN zaktualizują tabelę zgodności przeglądarki, co zdarza się dość często w przypadku nowszych wersji przeglądarki. Być może będziesz musiał aktualizować to, aby zsynchronizować z ich tabelą;).
kabirbaidhya
Nie bardzo, to najwcześniejsze znane wersje, które go obsługują, a nie najnowsze, a wszystkie przeglądarki, na które patrzą, już go obsługują. Zmieniłoby się to tylko wtedy, gdyby zdecydowali się dołączyć inną przeglądarkę, która może ustalić numery wersji na niektórych obsługiwanych przeglądarkach, co jest nieco dyskusyjne, ponieważ większość nowszych pochodzi z ich początkowej wersji.
Monso,
7
let path = window.location.protocol + '//' + window.location.hostname + ':' + window.location.port;
użytkownik3601578
źródło
6

To powinno działać:

window.location.hostname
GordyD
źródło
lub hostjeśli potrzebujesz portu
Lukas Liesis,
5

W zależności od potrzeb możesz użyć jednej z window.locationwłaściwości. W swoim pytaniu pytasz o hosta , który można odzyskać za pomocą window.location.hostname(np www.example.com.). W twoim przykładzie pokazujesz coś, co nazywa się origin , które można odzyskać za pomocą window.location.origin(np http://www.example.com.).

var path = window.location.origin + "/";

//result = "http://localhost:60470/"
Mahmoud Salah Eldien Saber
źródło
2

Podoba mi się ten w zależności od celu

window.location.href.split("/")[2] == "localhost:17000" //always domain + port

Możesz zastosować go na dowolnym ciągu adresu URL

var url = "http://localhost:17000/sub1/sub2/mypage.html?q=12";
url.split("/")[2] == "localhost:17000"
url.split("/")[url.split("/").length-1] == "mypage.html?q=12"

Usuwanie protokołu, domeny i ścieżki z ciągu url (ścieżka względna)

var arr = url.split("/");
if (arr.length>3)
   "/" + arr.splice(3, arr.length).join("/") == "/sub1/sub2/mypage.html?q=12"
Gosso
źródło