Document (rozszerzenie)#
document.location#
Właściwość location
zwraca obiekt, w którym umieszczone są szczegółowe dane na temat aktualnego bezwzględnego URL dla danego dokument. Jeśli nie można ustalić adresu zwrócona zostanie wartość null
. Właściwość jest tylko do odczytu.
Prosty przykład:
<script>
document.write(document.location); // Aktualny adres absolutny (zwrócony niejawnie jako tekst przez interpreter JS)
document.write("<br>");
document.write(document.location.toString()); // Aktualny adres absolutny (zwrócony jawnie jako tekst przez nas samych)
document.write("<br>");
document.write(typeof document.location); // Typ object
</script>
Efekt wywołania polecenia będzie identyczny z tym, który wykonuje się za pomocą document.URL
lub document.documentURI
. Ale na tym podobieństwa się kończą. W tym wypadku właściwość location
zwraca obiekt implementującym interfejs Location, który będzie posiadał kolejne właściwości oraz metody. Dzięki nim można odczytać poszczególne części adresu URL, a w razie konieczności zmienić lub przeładować stronę.
W naszym pierwszym przykładzie zwrócony zostanie adres (nie obiekt) w postaci tekstowej, ponieważ polecenie wywołane zostało w kontekście metody tekstowej document.write()
. Podobny efekt będzie przy zastosowaniu polecenia alert()
. Silnik JS automatycznie konwertuje nam obiekt do postaci tekstowej, czyli niejawnie wykonuje metodę document.location.toString()
. Są to podstawy JavaScriptu, ale warto o nich gdzieniegdzie przypominać.
Obiekt zwracany przez właściwość location
będzie posiadał następujące właściwości i metody:
document.location.href
- to samo codocument.location.toString()
.document.location.protocol
document.location.host
document.location.hostname
document.location.port
document.location.pathname
document.location.search
document.location.hash
document.assign("nowy_adres")
- wczytanie nowej strony.document.replace("nowy_adres")
- usunięcie bieżącej strony z historii sesji oraz wczytanie nowej stronydocument.reload(boolean)
- przeładowanie bieżącej strony. Można przekazać opcjonalny parametr boolowski, gdziefalse
oznacza przeładowanie dokumentu z pamięci cache przeglądarki (domyślnie), natomiasttrue
oznacza przeładowanie bezpośrednio z serwera.
Powyższe właściwości umożliwiają nie tylko odczyt, ale także zmianę poszczególnych części lub całego adresu URL. Pomimo tego, że właściwość location
jest tylko do odczytu, w praktyce przeglądarki internetowe wyjątkowo pozwalają na jej bezpośrednią zmianę. Wynika to z faktu, że w przypadku próby zmiany właściwości location
, polecenie jest automatycznie przekierowywane na wywołanie location.href="nowy_adres"
.
Jeśli ktoś ma problemy z odróżnianiem poszczególnych członów URL może przeanalizować opisy w poprzednim kursie HTML 4.01 (dział "Odsyłacze - Adresy internetowe") lub bezpośrednio ze specyfikacji HTML5.
Poniżej zamieszczam kilka specyficznych przykładów zastosowania właściwości z dokładnymi komentarzami:
<script>
document.location; // Pobranie obiektu lub odczytanie adresu absolutnego (jeśli użyte w kontekście tekstowym)
document.location = "nowy_adres"; // Wczytanie nowej strony
document.location = document.location; // Wczytanie tej samej strony
document.location.href; // Odczytanie adresu absolutnego w postaci tekstowej
document.location.href = "nowy_adres"; // Wczytanie nowej strony
document.location.href = document.location.href; // Wczytanie tej samej strony
document.location.href == document.location; // Zwróci true, równoważne polecenia po niejawnym żutowaniu na typ tekstowy prze interpreter JS
document.location.href == document.location.toString(); // Zwróci true, jawnie żutujemy location na typ tekstowy
document.location.href === document.location; // Zwróci false, pierwsze to typ tekstowy a drugie to obiekt
</script>
Co istotne, zarówno obiekt document
jak i window
stosują ten sam interfejs Location. Czyli w praktyce zamiast document.location
można pisać window.location
, a najlepiej po prostu samo location
. Niektóre nowoczesne przeglądarki (np. Chrome lub Opera, ale nie Firefox) bezpośrednio mapują document.location
na window.location
:
<script>
document.write(document.location === window.location); // Zwróci true, mamy do czynienia z tym samym obiektem
</script>
Właściwość location
pojawia się dopiero w specyfikacji HTML5.
Interfejs Web IDL#
[PutForwards=href, Unforgeable] readonly attribute Location? location;
[Unforgeable] interface Location { stringifier attribute DOMString href; void assign(DOMString url); void replace(DOMString url); void reload(); // URL decomposition IDL attributes attribute DOMString protocol; attribute DOMString host; attribute DOMString hostname; attribute DOMString port; attribute DOMString pathname; attribute DOMString search; attribute DOMString hash; };