Как я могу изменить DOCTYPE

Кто-нибудь знает, как я могу динамически изменять doctype с помощью javascript?

Я попытался с этой функцией,

document.doctype('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'); ,

но это не сработает.

Ответ 1

Я надеюсь, что это может помочь некоторым из вас (протестировано в консоли, и оно меняет фактический DOCTYPE)

var newDoctype = document.implementation.createDocumentType(
 'html',
 '-//W3C//DTD XHTML 1.0 Transitional//EN',
 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdd'
);

document.doctype.parentNode.replaceChild(newDoctype,document.doctype);

Ответ 2

document.doctype is a read-only свойство, а не метод, по-видимому, согласно MDC.

Что вам нужно:

https://developer.mozilla.org/En/DOM/DOMImplementation.createDocumentType

Возвращает объект DocumentType, который может быть использован с DOMImplementation.createDocument при создании документа или может быть помещен в документ через Node.insertBefore() или Node.replaceChild():

Ответ 3

Чтобы попытаться оправдать этот прецедент, у меня есть следующий сценарий:

У меня есть шаблон TAL, который отображает небольшой перенос страницы. Затем я переношу этот перенос в родительские теги следующим образом:

<html tal:omit-tag="True" ...>
  <body tal:omit-tag="True">
    <div class="wrapper" tal:omit-tag="True">
      ..

        <div id="mydiv" tal:content="foo()">Example content.</div>

      ..
    </div>
  </body>
</html>

Таким образом, этот шаблон TAL доступен для просмотра/редактирования в виде отдельного HTML файла дизайнером. Нельзя опустить DTD в TAL, но его нельзя добавить туда.

Легкий способ добавить его с помощью JavaScript выглядит следующим образом:

if (!document.doctype) {
    document.write('<!doctype HTML>\n' + \
        document.head.outerHTML + \
        document.body.outerHTML);
}

Ответ 4

Я не думаю, что ты можешь. doctype указан как свойство в документации W3C, но он доступен только для чтения. Даже если бы это было не так, я не могу представить, какое влияние это изменило бы в реальных браузерах.

Повторите свои последующие комментарии: вам придется обрабатывать эту серверную сторону и возвращать страницу, предназначенную для целевого браузера. Но вы не должны делать этого в каких-то, но очень серьезных случаях.

Ответ 5

Даже если бы вы могли, ваш код будет выполняться после того, как страница уже решила отобразить, в каком случае эффект изменения doctype ничего. Единственный способ представить современные браузеры, имеющие проблемы с doctype, заключается в том, что вы полагаетесь на режим quirks в IE - исправьте свой проект для работы во всех браузерах, но IE, а затем посмотрите на стиль IE.

Ответ 6

Если проблема связана только с IE, так как у меня также возникла одна и та же проблема, я использовал режим Quirks для IE. Просто используйте комментарий перед объявлением DOC TYPE, и IE перейдет в режим quirks.

Другой способ, с которым вы можете работать, - сначала загрузить script, чтобы обнаружить браузер, а затем перенаправить с параметром браузеров на другую страницу, где вы можете объявить зависимый от браузера тип doctype.

Пример того, что я сделал с моим кодом, выглядит так: -

<!--[if lt IE 9]>
<![endif]-->
<![if gte IE 9]>
<!DOCTYPE html>
<![endif]>

Здесь я удалил отказ от doctype от browe