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:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<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:

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:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<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:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<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#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
[PutForwards=href, Unforgeable] readonly attribute Location? location;
  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
[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;
};

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

Document (rozszerzenie) (H1) document.location (H2) Interfejs Web IDL (H3) Specyfikacje i inne materiały (H3)