16 августа 2009, 8:41

Javascript: получение/редактирование Doctype

Просто тривиальная задача, которая возникла в голове из-за комментариев к одному из топиков.

У нормальных браузеров есть гет-метод(функция) document.doctype из которой мы можем узнать о нашем Доктайпе, с помощью параметров name, publicId, systemId
<!-- вот такая строчка -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!-- соответствует такой -->
<!DOCTYPE name PUBLIC "publicId" "systemId">
У иных, темных браузерах, доступ к Доктайпу, организован через задницу двойной парентНод от тела документа, то есть
document.body.parentNode.parentNode.firstChild.nodeValue
Итого, что бы узнать о Доктайпе получаем простую функцию
function getdoctype() { 
	if (document.doctype) {
		alert("document.doctype:"
		+"\nname: " + document.doctype.name 
		+"\npublicId: " + document.doctype.publicId 
		+"\nsystemId: " + document.doctype.systemId);
	} else 
	if (document.body.parentNode) {
		var dbp = document.body.parentNode;
	  alert("document.body.parentNode:"
	  +"\n.parentNode.firstChild.nodeValue: " + dbp.parentNode.firstChild.nodeValue); 
	}
} 
Теперь мы знаем, как его получить, сразу становится интерестно, можно ли его изменить ;). В ИЕ и т. д. браузерах, мы просто меняем нодВалью, а в других, нормальных, барузерах мы имеем только гет-функцию, и при попытке передать значение, получим еррор, что функция онли геттер, и у неё нету возможности сеттер.

Но, как говорится, на каждого лалала, есть своя балда управа. Мы просто заменим доктайп новым чилдом, вместо его редактирования %)
var newDoctype = document.implementation.createDocumentType(name,publicId,systemId);
document.doctype.parentNode.replaceChild(newDoctype, document.doctype);



ПыСы: в опере, это я делал для неё, изменение доктайпа влеяет на рендеринг страниц, в других ничего не происходит. И ещё, изначально опера ведёт себя как нормбраузер, а потом, как ИЕ о_О гавнецо кароче говоря )))

1 комментарий РСС

CTAPbIu_MABP
а где это можно применить? править глюки осла переходя из стрикта в квирк?
Vitaliy Bogdanets
Переключалка стрикт/квирк не работает при переключении через джаваскрипт :( Ни в одном браузере. Срабатывает только на Опере, и я тестил только на 10 бета 3

Ваш комментарий

адрес не будет опубликован

ХТМЛ не работает


Ctrl + Enter