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:
<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:
[object HTMLDocument]- Firefox, Chrome, Opera[object Document]- IE
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:
[object XMLDocument]- Firefox, Opera[object Document]- Chrome, IE
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#
| Nazwa | Opis |
|---|---|
document.anchors | Zwraca kolekcję typu HTMLCollection ze wszystkimi kotwicami a w danym dokumencie |
document.body | Zwraca lub ustawia pierwszy element body lub frameset w danym dokumencie |
document.cookie | Zwraca lub umożliwia tworzenie i modyfikację ciasteczek dla danego dokumentu |
document.currentScript | Zwraca dostęp do aktualnie wykonywanego skryptu w danym dokumencie |
document.domain | Zwraca nazwę domeny serwera z którego wczytano dany dokument |
document.embeds | Zwraca kolekcję typu HTMLCollection ze wszystkimi elementami embed w danym dokumencie |
document.forms | Zwraca kolekcję typu HTMLCollection ze wszystkimi formularzami w danym dokumencie |
document.head | Zwraca pierwszy element head w danym dokumencie |
document.images | Zwraca kolekcję typu HTMLCollection ze wszystkimi obrazkami w danym dokumencie |
document.lastModified | Zwraca datę ostatniej modyfikacji danego dokumentu |
document.links | Zwraca kolekcję typu HTMLCollection ze wszystkimi elementami a lub area w danym dokumencie |
document.location | Zwraca obiekt zawierający szczegółowe informacje na temat aktualnego bezwzględnego URL dla danego dokumentu |
document.plugins | Zwraca kolekcję typu HTMLCollection ze wszystkimi elementami embed w danym dokumencie |
document.readyState | Zwraca aktualny status wczytywania dangego dokumentu |
document.referrer | Zwraca adres strony z którego załadowano dany dokument |
document.scripts | Zwraca kolekcję typu HTMLCollection ze wszystkimi skryptami w danym dokumencie |
document.title | Zwraca lub ustawia tytuł w danym dokumencie |
Metody Document#
| Nazwa | Opis |
|---|---|
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#
[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;partial interface XMLDocument {
boolean load(DOMString url);
};