Document (rozszerzenie)#

document.readyState#

Właściwość readyState jest bardzo ciekawa, ponieważ przechowuje aktualny status wczytywania dokumentu (current document readiness). Status ten może się zmieniać w czasie pobierania i przetwarzania strony oraz jej zasobów. Dostępne są trzy następujące wartości:

Właściwość readyState jest tylko do odczytu. Kiedy dokument jest tworzony i jest związany z parserem HTML, parserem XML lub procesorem XSLT, zawsze musi mieć ustawiony aktualny status wczytywania dokumentu na początkową wartość tekstową "loading". Na końcu musi zostać podana wartość "complete". W czasie wczytywania strony różne algorytmy mogą dodatkowo wpływać na tę wartość.

Za każdym razem, kiedy wartość readyState ulega zmianie, w aplikacjach klienckich musi zostać automatycznie odpalone zdarzenie readystatechange na obiekcie document. Zdarzenie to można przechwycić np. za pomocą atrybutowego uchwytu onreadystatechange lub za pomocą metody nasłuchującej addEventListener. Prosty przykład:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<script>

	document.onreadystatechange = function(){

		alert(document.readyState); // Aktualny status

	}

	// Alternatywnie

	document.addEventListener("readystatechange", function(){

		alert(document.readyState); // Aktualny status

	}, false);

</script>

Prawdę mówiąc jest to kolejny sposób pozwalający na uruchamianie skryptów w specyficznych sytuacjach, aczkolwiek żadko stosowany przez programistów. Większość z nich stosuje klasyczne polecenia, np.:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<script>

	window.onload = function(){

		alert("Wszystkie zasoby wczytane");

	}

	document.addEventListener("DOMContentLoaded", function(){

		alert("Dokument sparsowany");

	}, false);

</script>

Z tego co widzę zdarzenie load nie jest odpalane dla obiektu document w najnowszych przeglądarkach, chociaż jest definiowane przez specyfikację HTML5.

Nie bez powodu prezentuje te wszystkie sposoby w jednym miejscu. Pomimo że niektóre z nich wydają się robić to samo (np. readyState = "interactive" i DOMContentLoaded), w praktyce jedne będą wykonywać się zawsze minimalnie przed drugimi. Wynika to ze szczegółowego opisu przetwarzania dokumentu w HTML5. Każda zmiana właściwości, każde odpalenie zdarzenia ma swoje określone miejsce i trzeba się z tym liczyć. Przykład:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<script>

	window.onload = function(){

		alert("window.onload"); // Czwarte

	}

	document.onreadystatechange = function(){

		if (document.readyState == "interactive"){

			alert("document.readyState == interactive"); // Pierwsze

		}

		if (document.readyState == "complete"){

			alert("document.readyState == complete"); // Trzecie

		}

	}

	document.addEventListener("DOMContentLoaded", function(){

		alert("DOMContentLoaded"); // Drugie

	}, false);

</script>

Nie jest to problemem kiedy pracujemy z własnymi skryptami, zawsze dobierzemy odpowiednie rozwiązanie. Wiedza taka będzie szczególnie użyteczna przy tworzeniu skryptów uruchamianych w różnych przeglądarkach za pomocą Greasemonke'a, Scriptisha czy Tampermonke'a. Każdy z tych dodatków podczepia skrypty w troszkę inny sposób, ale znając podstawy bardzo łatwo nad tym zapanować i zapewnić pełną przenośność między rozszerzeniami.

Właściwość readyState 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. #
readonly attribute DOMString readyState;

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

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