как я могу изменить DOCTYPE - PullRequest
12 голосов
/ 30 июня 2010

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

Я пытался использовать эту функцию,

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

, но она не работает.

Ответы [ 6 ]

11 голосов
/ 25 января 2013

Я надеюсь, что это может помочь некоторым из вас (протестировано в консоли, и оно меняет фактический 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);
3 голосов
/ 31 мая 2011

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

У меня есть шаблон 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);
}
3 голосов
/ 30 июня 2010

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

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

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

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

1 голос
/ 30 июня 2010

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

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

0 голосов
/ 28 августа 2012

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

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

пример того, что я сделал с моим кодомэто как: -

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

Здесь я удалил declearation doctype из browe

0 голосов
/ 30 июня 2010

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

...