Document (rozszerzenie)#

Wstęp#

Interfejs Document został dokładnie zdefiniowany w specyfikacji DOM4, ale HTML5 rozszerza go znacząco. Będzie miał kilka interesujących właściwości i metod, które zostaną dokładnie omówione.

Każdy dokument XML oraz HTML jest reprezentowany w aplikacjach HTML jako obiekt document. W przeglądarkach internetowych obiekt document będzie właściwością globalnego obiektu window. W skryptach można się do niego odwoływać następująco:

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

	// Dłuższa forma
	document.write(window.document); // [object HTMLDocument]
	document.write(this.document); // [object HTMLDocument]

	// Krótsza forma
	document.write(document); // [object HTMLDocument]

</script>

Nie ma potrzeby wywoływać pełnego łańcucha obiektów (np. window.document), wystarczy samo document. Ta sama uwaga będzie dotyczyła innych właściwości obiektu globalnego (np. location czy navigator).

Adresem dokumentu jest bezwzględny URL, który początkowo zostaje ustawiany kiedy dokument jest tworzony, ale to może się w każdej chwili zmienić w trakcie życia dokumentu, na przykład kiedy użytkownik przejdzie do etykiety lub przy wywoływaniu metody pushState() z nowym URL-em.

Interaktywne aplikacje przetwarzające (UA) zazwyczaj prezentują aktulany adres dokumentu w swoim interfejsie. W przypadku przeglądarek internetowych adres może być wyświetlany na pasku adresu (zazwyczaj u góry) albo na pasku stanu lub dymku (zazwyczaj na dole).

Kiedy obiekt document jest tworzony przez skrypt za pomocą metod createDocument() lub createHTMLDocument() należących do obiektu znajdującego się we właściwości implementation, jego adres jest taki sam jak adres skryptu.

Referrerem dokumentu # jest bezwzględny URL, który może być ustawiony w czasie tworzenia dokumentu. Jeśli nie jest wyraźnie określony, jego wartością jest pusty łańcuch znakowy.

Sam interfejs Document dziedziczy po interfejsie Node, dlatego ma dostęp do wszystkich poleceń z tego interfejsu (oraz z kolejnych interfejsów w łańcuchu dziedziczenia).

HTML5 wprowadza pewne zmiany dla interfejsu Document. W przeszłości specyfikacja DOM Level 2 HTML osobno definiowała interfejs HTMLDocument, który dziedziczył po Document i dostarczał specyficzne polecenia dla dokumentów HTML. HTML5 przenosi te polecenia bezpośrednio do interfejsu Document i rozszerza go na wiele sposobów. Ponieważ wszystkie dokumenty używają interfejsu Document, specyficzne polecenia są teraz dostępne dla wszystkich dokumentów, np. mogą być używane w dokumentach SVG.

Wszystkie starsze skrypty, które modyfikowały prototyp HTMLDocument, powinny wciąż działać ponieważ window.HTMLDocument od tej pory zwraca interfejsowy obiekt window.Document.

Warto omówić kilka specyficznych zachowań poszczególnych przeglądarek.

W przypadku odwołania sie do obiektu document w dokumencie HTML zwrócony zostanie obiekt typu:

W obu przypadkach polecenia zawarte w obiektach są identyczne, aczkolwiek nazwy implementowanych przez nie interfejsów pozostają różne. Wydaje się, że w tym przypadku to właśnie IE9 zachowuje się prawidłowo (zgodnie z HTML5). Nie stanowi to żadnego problemu, raczej pozostałe przeglądarki zachowały starą nazwę ze względu na kompatybilność z już istniejącym kodem.

W przypadku odwołania sie do obiektu document utworzonego za pomocą metody createDocument() zwrócony zostanie obiekt typu:

Przeglądarka IE dalej kuleje z obsługą XML, dlatego zwracanie dokumentu HTML nie dziwi. W przypadku Chrome jest nieco inaczej. Wyglada na to, że Chrome dla obiektu document w odniesieniu do dokumentu XML zwraca nazwę [object Document].

Prawdę mówiąc żadna przeglądarka nie działa jeszcze w 100% poprawnie dla interfejsu Document. Polecenie window.HTMLDocument === window.Document w każdym programie zwraca wartość false, co jest niezgodne ze specyfikacją HTML5. Należy oczekiwać, że zachowanie to zostanie naprawione w niedalekiej przyszłości.

Właściwości Document#

NazwaOpis
document.anchorsZwraca kolekcję typu HTMLCollection ze wszystkimi kotwicami a w danym dokumencie
document.bodyZwraca lub ustawia pierwszy element body lub frameset w danym dokumencie
document.cookieZwraca lub umożliwia tworzenie i modyfikację ciasteczek dla danego dokumentu
document.currentScriptZwraca dostęp do aktualnie wykonywanego skryptu w danym dokumencie
document.domainZwraca nazwę domeny serwera z którego wczytano dany dokument
document.embedsZwraca kolekcję typu HTMLCollection ze wszystkimi elementami embed w danym dokumencie
document.formsZwraca kolekcję typu HTMLCollection ze wszystkimi formularzami w danym dokumencie
document.headZwraca pierwszy element head w danym dokumencie
document.imagesZwraca kolekcję typu HTMLCollection ze wszystkimi obrazkami w danym dokumencie
document.lastModifiedZwraca datę ostatniej modyfikacji danego dokumentu
document.linksZwraca kolekcję typu HTMLCollection ze wszystkimi elementami a lub area w danym dokumencie
document.locationZwraca obiekt zawierający szczegółowe informacje na temat aktualnego bezwzględnego URL dla danego dokumentu
document.pluginsZwraca kolekcję typu HTMLCollection ze wszystkimi elementami embed w danym dokumencie
document.readyStateZwraca aktualny status wczytywania dangego dokumentu
document.referrerZwraca adres strony z którego załadowano dany dokument
document.scriptsZwraca kolekcję typu HTMLCollection ze wszystkimi skryptami w danym dokumencie
document.titleZwraca lub ustawia tytuł w danym dokumencie

Metody Document#

NazwaOpis
node.getElementsByName()Zwraca kolekcję typu NodeList ze wszystkimi węzłami typu Element o określonej wartości atrybutu name w danym dokumencie

Interfejs Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
[OverrideBuiltins]
partial /*sealed*/ interface Document {
	// resource metadata management
	[PutForwards=href, Unforgeable] readonly attribute Location? location;
		attribute DOMString domain;
	readonly attribute DOMString referrer;
		attribute DOMString cookie;
	readonly attribute DOMString lastModified;
	readonly attribute DOMString readyState;

	// DOM tree accessors
	getter object (DOMString name);
		attribute DOMString title;
		attribute DOMString dir;
		attribute HTMLElement? body;
	readonly attribute HTMLHeadElement? head;
	readonly attribute HTMLCollection images;
	readonly attribute HTMLCollection embeds;
	readonly attribute HTMLCollection plugins;
	readonly attribute HTMLCollection links;
	readonly attribute HTMLCollection forms;
	readonly attribute HTMLCollection scripts;
	NodeList getElementsByName(DOMString elementName);


	readonly attribute HTMLScriptElement? currentScript;

	// dynamic markup insertion
	Document open(optional DOMString type, optional DOMString replace);
	WindowProxy open(DOMString url, DOMString name, DOMString features, optional boolean replace);
	void close();
	void write(DOMString... text);
	void writeln(DOMString... text);

	// user interaction
	readonly attribute WindowProxy? defaultView;
	readonly attribute Element? activeElement;
	boolean hasFocus();
		attribute DOMString designMode;
	boolean execCommand(DOMString commandId);
	boolean execCommand(DOMString commandId, boolean showUI);
	boolean execCommand(DOMString commandId, boolean showUI, DOMString value);
	boolean queryCommandEnabled(DOMString commandId);
	boolean queryCommandIndeterm(DOMString commandId);
	boolean queryCommandState(DOMString commandId);
	boolean queryCommandSupported(DOMString commandId);
	DOMString queryCommandValue(DOMString commandId);
	readonly attribute HTMLCollection commands;

	// special event handler IDL attributes that only apply to Document objects
	[LenientThis] attribute EventHandler onreadystatechange;
};
Document implements GlobalEventHandlers;
  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
partial interface XMLDocument {
	boolean load(DOMString url);
};

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

Document (rozszerzenie) (H1) Wstęp (H2) Właściwości Document (H3) Metody Document (H3) Interfejs Web IDL (H3) Specyfikacje i inne materiały (H3)