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); };