DOMImplementation#

DOMImplementation.createHTMLDocument()#

Metoda createHTMLDocument() tworzy nowy węzeł typu Document (tzw. dokument HTML) z określonym tytułem i minimalną podstawową zawartością.

Opis działania#

Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
var new_HTML = domImplementation.createHTMLDocument([title]);

gdzie poszczególne człony oznaczają:

Algorytm wywołania metody createHTMLDocument(title) nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:

  1. Niech doc będzie nowym węzłem typu Document (wewnętrznie dokumentem HTML).
  2. Ustaw typ zawartości w doc na "text/html".
  3. Utwórz nowy węzeł typu DocumentType z nazwą będącą łańcuchem znakowym "html" oraz właścicielem będącym doc, a następnie dodaj go do doc.
  4. Utwórz now element typu html w przestrzeni nazw HTML, a następnie dodaj go do doc.
  5. Utwórz now element typu head w przestrzeni nazw HTML, a następnie dodaj go do elementu typy html utworzonego w poprzednim kroku.
  6. Jeśli argument title nie został pominięty to wykonaj poniższe podkroki:

    1. Utwórz nowy element typu title w przestrzeni nazw HTML, a następnie dodaj go do elementu typu head utworzonego w poprzednim kroku.
    2. Utwórz nowy węzeł typu Text, ustaw jego dane tekstowe na title (dopuszczalny jest pusty łańcuch znakowy), a następnie dodaj go do elementu typu title utworzonego w poprzednim kroku.
  7. Utwórz nowy element typu body w przestrzeni nazw HTML, a następnie dodaj go do elementu typu html utworzonego we wcześniejszym kroku.
  8. Pochodzeniem w doc jest pochodzenie w dokumencie skojarzonym z obiektem kontekstu.
  9. Zwróć doc.

Z perspektywy znaczników metoda createHTMLDocument() zwróci następującą strukturę (zakładamy, że tytuł jest opcjonalny i wszelkie znaki nowej linii oraz tabulatory nie reprezentują dodatkowych węzłów tekstowych, a ich jedynym zadanie jest poprawa czytelności zapisu):

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<!DOCTYPE html>
<html>
	<head>
		<title>title</title>
	</head>
	<body>
	</body>
</html>

Istotną sprawą jest to, że metoda createHTMLDocument() zwraca obiekt typu Document (wewnętrznie dokument HTML) z cechami i podstawową zawartością właściwą dla dokumentów HTML, w przeciwieństwie do konstruktora new Document(), który tworzy pusty obiekt typu Document (wewnętrznie dokument XML), lub metody DOMImplementation.createDocument(), która tworzy obiekt typu XMLDocument (wewnętrznie też dokument XML), ale z opcjonalnym elementem dokumentowym oraz deklaracją typu dokumentu.

Z praktycznego punktu widzenia sposób utworzenia dokumentu determinuje wiele jego poszczególnych cech, ale zachowanie to jest wyjątkowo niespójne i w głównej mierze zależy od danej przeglądarki internetowej (szczegóły).

Obiekt zwracany przez metodę createDocument() implementuje interfejs Document, dlatego ma dostęp do wszystkich poleceń z tego interfejsu (oraz z kolejnych interfejsów w łańcuchu dziedziczenia).

Prosty przykład:

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

	function getInfoDoc(desc, whatDoc){

		doc.write(desc + "<br>");
		doc.write("Interfejs: " + whatDoc + "<br>");
		doc.write("title: " + whatDoc.title + "<br>");
		doc.write("getElementsByTagName('title').length: " + whatDoc.getElementsByTagName('title').length + "<br>");
		doc.write("getElementsByTagName('*').length: " + whatDoc.getElementsByTagName('*').length + "<br>");
		doc.write("contentType: " + whatDoc.contentType + "<br>");
		doc.write("compatMode: " + whatDoc.compatMode + "<br>");
		doc.write("doctype: " + whatDoc.doctype + "<br>");
		if (whatDoc.doctype){
			doc.write("doctype.name: " + whatDoc.doctype.name + "<br>");
			doc.write("doctype.publicId: " + whatDoc.doctype.publicId + "<br>");
			doc.write("doctype.systemId: " + whatDoc.doctype.systemId + "<br>");
		}
		doc.write("documentElement: " + whatDoc.documentElement + "<br>");
		if (whatDoc.documentElement){
			doc.write("documentElement.tagName: " + whatDoc.documentElement.tagName + "<br>");
			doc.write("documentElement.namespaceURI: " + whatDoc.documentElement.namespaceURI + "<br>");
			doc.write("documentElement.prefix: " + whatDoc.documentElement.prefix + "<br>");
		}
		doc.write("documentURI: " + whatDoc.documentURI + "<br>");
		doc.write("URL: " + whatDoc.URL + "<br>");
		doc.write("origin: " + whatDoc.origin + "<br>");
		doc.write("characterSet: " + whatDoc.characterSet + "<br>");
		doc.write("charset: " + whatDoc.charset + "<br>");
		doc.write("inputEncoding: " + whatDoc.inputEncoding + "<br>");
		doc.write("Nowy dokument po serializacji: " + "<br>");
		var newText = document.createTextNode("");
		newText.data = new XMLSerializer().serializeToString(whatDoc);
		doc.getElementsByTagName("html")[0].lastChild.appendChild(newText);
		doc.write("<br><br>");

	}

	var doc = document; // domyślny dokument tworzony przez parser HTML

	var newDocHTML = doc.implementation.createHTMLDocument("Jakiś tytuł"); // nowy dokument HTML
	getInfoDoc("Parametry dla createHTMLDocument('Jakiś tytuł'):", newDocHTML);

	newDocHTML = doc.implementation.createHTMLDocument(""); // nowy dokument HTML
	getInfoDoc("Parametry dla createHTMLDocument(''):", newDocHTML);

	newDocHTML = doc.implementation.createHTMLDocument(); // nowy dokument HTML
	getInfoDoc("Parametry dla createHTMLDocument():", newDocHTML);

</script>

Na chwilę obecną jedynie przeglądarki Firefox i Chrome obsługują metodę createHTMLDocument() zgodnie z najnowszymi wymaganiami specyfikacji DOM4, gdyż faktycznie zezwalają na pominięcie argumentu przy wywołaniu metody.

Metoda createHTMLDocument() pojawia się dopiero w specyfikacji DOM4. Prawdę mówiąc to po raz pierwszy zdefiniowano ją w interfejsie HTMLDOMImplementation w roboczej wersji specyfikacji DOM Level 2 HTML, ale w finalnej rekomendacji tejże specyfikacji został on pominięty.

Składnia Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
interface DOMImplementation {
	[NewObject] Document createHTMLDocument(optional DOMString title);
};

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

DOMImplementation (H1) DOMImplementation.createHTMLDocument() (H2) Opis działania (H3) Składnia Web IDL (H3) Specyfikacje i inne materiały (H3)