Działa to z ciągiem adresu URL gdzie location obiekt nie jest dostępny (js poza przeglądarką!)
Thamme Gowda
David Calhoun's odpowiedź wykorzystuje wbudowany w parsera (jak location), ale może być stosowany do dowolnego adresu URL. Sprawdź, czy jest schludnie.
Stijn de Witt
6
Lub po prostu zmień go w jedno-liniowy:window.location.href.split('/').slice(0, 3).join('/')
Ryan McGeary
i jak zrobiłbyś to w węźle?
DDD
5
window.location.origin
int soumen
576
var full = location.protocol+'//'+location.hostname+(location.port ?':'+location.port:'');
@Randomblue Co z tym? Dostaniesz about://. Jednak jestem ciekawy, do czego byłby przypadek użycia about:blank? Nie jestem pewien, czy jakakolwiek przeglądarka wstrzykuje zasoby wtyczek about:blank, ale wydaje się, że może to być jedyny przypadek użycia.
Shef
3
To nie działa wcale, jeśli masz ciąg adresu URL, prawda? (tzn. musisz być przy,location aby to zadziałało)
Metoda 2 (stary sposób): użyj wbudowanego parsera przeglądarki w DOM
Użyj tego, jeśli potrzebujesz tego do starszych przeglądarek.
// Create an anchor element (note: no need to append this element to the document)const url = document.createElement('a');// Set href to any path
url.setAttribute('href','http://example.com:12345/blog/foo/bar?startIndex=1&pageSize=10');
Otóż to!
Wbudowany parser przeglądarki wykonał już swoje zadanie. Teraz możesz po prostu pobrać potrzebne części (pamiętaj, że działa to w przypadku obu powyższych metod):
// Get any piece of the url you're interested in
url.hostname;// 'example.com'
url.port;// 12345
url.search;// '?startIndex=1&pageSize=10'
url.pathname;// '/blog/foo/bar'
url.protocol;// 'http:'
Bonus: wyszukiwanie parametrów
Prawdopodobnie zechcesz również rozdzielić parametry adresu URL wyszukiwania, ponieważ „? StartIndex = 1 i pageSize = 10” nie jest zbyt użyteczny.
Jeśli użyłeś metody 1 (URL API) powyżej, po prostu użyj gettererów getParams:
link.protocol dostaje mi „http:”, jeśli sprawdzę ankera za pomocą „google.com” :-(var link = document.createElement('a'); link.setAttribute('href', 'google.com'); console.log(link.protocol)
eXe
httpMoże robisz to na stronie? Jeśli nie zostanie określony, „odziedziczy” po bieżącej lokalizacji
Stijn de Witt
4
To fantastyczna odpowiedź i powinna uzyskać więcej głosów, ponieważ odpowiedź ta nie ogranicza się tylko do bieżącej lokalizacji, ale działa na dowolnym adresie URL , a ponieważ ta odpowiedź wykorzystuje wbudowany parser przeglądarki zamiast budowania jednego z nich (czego nie możemy mam nadzieję, że zrobię to równie dobrze lub tak szybko!).
Stijn de Witt
Dziękuję za tę sprytną sztuczkę! Chciałbym dodać jedno: jest jedno hosti drugie hostname. Pierwszy obejmuje port (np. localhost:3000), A drugi to tylko nazwa hosta (np localhost.).
koder
Działa to dobrze w przypadku bezwzględnego adresu URL. Nie działa w przypadku względnego adresu URL i przeglądarki. Jakieś sugestie?
Gururaj
132
Z jakiegoś powodu wszystkie odpowiedzi są przesadzone. To wszystko, czego potrzeba:
Do Twojej wiadomości, jestem pewien, że będzie to świetne w przyszłości, gdy wszystkie popularne przeglądarki go wdrożą, jednak obecnie tak nie jest: developer.mozilla.org/en-US/docs/Web/API/… At według czasu moich badań tylko najnowsze wersje przeglądarek Firefox i WebKit obsługują właściwość origin.
Witaj od 2015 roku. Niestety, URLUtils nadal nie jest poprawnie zaimplementowany we wszystkich przeglądarkach, zgodnie z tabelą kompatybilności w MDN. Wydaje się jednak, że właściwość origin jest nieco lepiej obsługiwana niż w 2013 roku, ale nadal nie nadaje się do produkcji, ponieważ nie jest poprawnie zaimplementowana w Safari. Przepraszam chłopaki :(
totallyNotLizards
Aktualizacja: Wciąż nieobsługiwana w wielu przeglądarkach (również w safari) :( :(
Ahmad hamza
Nie działa również w IE, zwraca „niezdefiniowany”.
Siddhartha Chowdhury
53
Jak już wspomniano, nie jest jeszcze w pełni obsługiwany window.location.origin ale zamiast go używać lub tworzyć nową zmienną do użycia, wolę ją sprawdzić, a jeśli nie jest ustawiona, aby ją ustawić.
Dodając odpowiedź do starszego pytania z istniejącymi odpowiedziami, warto wyjaśnić, jakie nowe informacje niesie twoja odpowiedź i stwierdzić, czy upływ czasu wpływa na odpowiedź.
Jason Aller,
8
Rzeczywiście, window.location.origin działa dobrze w przeglądarkach zgodnych ze standardami, ale zgadnij co. IE nie przestrzega standardów.
Z tego powodu działało to w IE, FireFox i Chrome:
var full = location.protocol+'//'+location.hostname+(location.port ?':'+location.port:'');
ale dla możliwych przyszłych ulepszeń, które mogą powodować konflikty, podałem odniesienie do „okna” przed obiektem „lokalizacja”.
var full = window.location.protocol+'//'+window.location.hostname+(window.location.port ?':'+window.location.port:'');
rozważ wyjaśnienie swojej odpowiedzi. Nie zakładaj, że OP może zrozumieć znaczenie różnych części twojego kodu.
ADyson
3
Spróbuj użyć wyrażenia regularnego (Regex), które będzie bardzo przydatne, gdy chcesz sprawdzić / wyodrębnić rzeczy, a nawet wykonać proste parsowanie w javascript.
Wyrażenie regularne to:
/([a-zA-Z]+):\/\/([\-\w\.]+)(?:\:(\d{0,5}))?/
Demonstracja:
function breakURL(url){
matches =/([a-zA-Z]+):\/\/([\-\w\.]+)(?:\:(\d{0,5}))?/.exec(url);
foo =newArray();if(matches){for( i =1; i < matches.length ; i++){ foo.push(matches[i]);}}return foo
}
url ="https://www.google.co.uk:55699/search?q=http%3A%2F%2F&oq=http%3A%2F%2F&aqs=chrome..69i57j69i60l3j69i65l2.2342j0j4&sourceid=chrome&ie=UTF-8"
breakURL(url);// [https, www.google.co.uk, 55699]
breakURL();// []
breakURL("asf");// []
breakURL("asd://");// []
breakURL("asd://a");// [asd, a, undefined]
/**
* Get the current URL from `window` context object.
* Will return the fully qualified URL if neccessary:
* getCurrentBaseURL(true, false) // `http://localhost/` - `https://localhost:3000/`
* getCurrentBaseURL(true, true) // `http://www.example.com` - `https://www.example.com:8080`
* getCurrentBaseURL(false, true) // `www.example.com` - `localhost:3000`
*
* @param {boolean} [includeProtocol=true]
* @param {boolean} [removeTrailingSlash=false]
* @returns {string} The current base URL.
*/exportconst getCurrentBaseURL =(includeProtocol =true, removeTrailingSlash =false)=>{if(!window ||!window.location ||!window.location.hostname ||!window.location.protocol){
console.error(`The getCurrentBaseURL function must be called from a context in which window object exists.Yet, window is ${window}`,[window, window.location, window.location.hostname, window.location.protocol],)thrownewTypeError('Whole or part of window is not defined.')}const URL =`${includeProtocol ?`${window.location.protocol}//` : ''}${window.location.hostname}${
window.location.port ?`:${window.location.port}`:''}${removeTrailingSlash ?'':'/'}`// console.log(`The URL is ${URL}`)return URL
}
Odpowiedzi:
najpierw uzyskaj aktualny adres
Następnie po prostu przeanalizuj ten ciąg
twój adres URL to:
Mam nadzieję że to pomoże
źródło
location
obiekt nie jest dostępny (js poza przeglądarką!)location
), ale może być stosowany do dowolnego adresu URL. Sprawdź, czy jest schludnie.window.location.href.split('/').slice(0, 3).join('/')
źródło
about://
. Jednak jestem ciekawy, do czego byłby przypadek użyciaabout:blank
? Nie jestem pewien, czy jakakolwiek przeglądarka wstrzykuje zasoby wtyczekabout:blank
, ale wydaje się, że może to być jedyny przypadek użycia.location
aby to zadziałało)location.host
zamiastlocation.hostname
+location.port
?Żadna z tych odpowiedzi nie wydaje się w pełni uwzględniać pytania, które wymaga podania dowolnego adresu URL, a nie adresu URL bieżącej strony.
Metoda 1: Użyj interfejsu API URL (zastrzeżenie: brak obsługi IE11)
Możesz użyć interfejsu API URL (nie obsługiwany przez IE11, ale dostępny wszędzie indziej) ).
Ułatwia to także dostęp do parametrów wyszukiwania . Kolejny bonus: można go użyć w narzędziu do pracy w sieci, ponieważ nie zależy od modelu DOM.
Metoda 2 (stary sposób): użyj wbudowanego parsera przeglądarki w DOM
Użyj tego, jeśli potrzebujesz tego do starszych przeglądarek.
Otóż to!
Wbudowany parser przeglądarki wykonał już swoje zadanie. Teraz możesz po prostu pobrać potrzebne części (pamiętaj, że działa to w przypadku obu powyższych metod):
Bonus: wyszukiwanie parametrów
Prawdopodobnie zechcesz również rozdzielić parametry adresu URL wyszukiwania, ponieważ „? StartIndex = 1 i pageSize = 10” nie jest zbyt użyteczny.
Jeśli użyłeś metody 1 (URL API) powyżej, po prostu użyj gettererów getParams:
Lub uzyskać wszystkie parametry:
Jeśli użyłeś metody 2 (stary sposób), możesz użyć czegoś takiego:
źródło
var link = document.createElement('a'); link.setAttribute('href', 'google.com'); console.log(link.protocol)
http
Może robisz to na stronie? Jeśli nie zostanie określony, „odziedziczy” po bieżącej lokalizacjihost
i drugiehostname
. Pierwszy obejmuje port (np.localhost:3000
), A drugi to tylko nazwa hosta (nplocalhost
.).Z jakiegoś powodu wszystkie odpowiedzi są przesadzone. To wszystko, czego potrzeba:
Więcej informacji można znaleźć tutaj: https://developer.mozilla.org/en-US/docs/Web/API/window.location#Properties
źródło
URLUtils
interfejs zdefiniowany w WHATWG i zawieraorigin
atrybut.Jak już wspomniano, nie jest jeszcze w pełni obsługiwany
window.location.origin
ale zamiast go używać lub tworzyć nową zmienną do użycia, wolę ją sprawdzić, a jeśli nie jest ustawiona, aby ją ustawić.Na przykład;
Napisałem o tym kilka miesięcy temu Poprawka dla window.location.origin
źródło
window.location.origin
istnieje. Dziękuję Ci. ^^gospodarz
zwroty
localhost:2679
nazwa hosta
zwroty
localhost
źródło
localhost/
zamiastlocalhost:3000
.window.location.origin
wystarczy, aby uzyskać to samo.źródło
Oznacza to, że jeśli chcesz uzyskać tylko część HTTP / HTTPS, możesz zrobić coś takiego:
Do domeny możesz użyć:
Do portu możesz użyć:
Pamiętaj, że port będzie pustym ciągiem, jeśli nie jest widoczny w adresie URL. Na przykład:
Jeśli chcesz pokazać 80/443, gdy nie używasz portu
źródło
Dlaczego nie użyć:
źródło
Rzeczywiście, window.location.origin działa dobrze w przeglądarkach zgodnych ze standardami, ale zgadnij co. IE nie przestrzega standardów.
Z tego powodu działało to w IE, FireFox i Chrome:
ale dla możliwych przyszłych ulepszeń, które mogą powodować konflikty, podałem odniesienie do „okna” przed obiektem „lokalizacja”.
źródło
Oto rozwiązanie, którego używam:
EDYTOWAĆ:
Aby dodać kompatybilność z różnymi przeglądarkami, użyj:
źródło
window.location.host
może nie być najlepszy w różnych przeglądarkachźródło
źródło
Spróbuj użyć wyrażenia regularnego (Regex), które będzie bardzo przydatne, gdy chcesz sprawdzić / wyodrębnić rzeczy, a nawet wykonać proste parsowanie w javascript.
Wyrażenie regularne to:
Demonstracja:
Teraz możesz także przeprowadzić weryfikację.
źródło
Prosta odpowiedź, która działa we wszystkich przeglądarkach:
źródło
Styl ES6 z konfigurowalnymi parametrami.
źródło
window.location.protocol + '//' + window.location.host
źródło