2010-06-30 16 views
11

¿alguien aquí sabe cómo puedo cambiar dinámicamente el doctype con javascript?cómo puedo cambiar el DOCTYPE

he intentado con esta función,

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

pero no funciona.

+1

Sólo por curiosidad, ¿por qué quieres hacer esto? –

+0

bueno, quiero cambiar el doctype si los browers son firefox u opera. Tengo el código de detección del navegador funcionando. – mana

+1

Incluso si pudiera, ¿qué efecto espera de él? IIRC, el navegador solo considera el tipo de documento una vez, cuando está analizando la página. – Piskvor

Respuesta

1

No creo que puedas. doctype es listed como una propiedad en la documentación W3C, pero es de solo lectura. Incluso si no fuera así, no puedo imaginar qué efecto tendría el cambio en los navegadores del mundo real.

Re sus comentarios siguientes: Tendría que manejar este lado del servidor y devolver la página adaptada al navegador de destino. Pero no deberías tener que hacer eso en ningún caso, sino en otros muy marginales.

+0

Propiedad de solo lectura :( – Sarfraz

+0

@sAc: Acabo de llegar. :-) –

+2

Acerca de su última oración ("simplemente marcan el modo de las peculiaridades o no según haya * un * doctype, no lo que es") : eso no es cierto. Varios Doctypes activarán el modo peculiar, como el HTML 3.2 que el OP mencionó en uno de sus comentarios a su pregunta. Consulte [Activación de los modos del navegador con Doctype] (http://hsivonen.iki.fi/doctype/#handling). –

3

document.doctype is a read-only propiedad, no método, aparentemente de acuerdo con MDC.

Lo que necesita es:

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

Devuelve un objeto DocumentType el cual puede ser utilizado con DOMImplementation.createDocument sobre la creación de documentos o que se puede poner en el documento a través de Node.insertBefore() o Node.replaceChild():

+0

'createDocumentType' no está disponible en todos los navegadores. Chromium no lo tiene. –

+0

30 de marzo de 2013: Chromium lo tiene, e IE9 + –

0

Incluso si pudiera, su código se estaría ejecutando después de que la página ya haya decidido procesar, en cuyo caso el efecto de cambiar el doctype no es nada. La única forma en que puedo imaginar que los navegadores modernos tengan problemas con los tipos de documentos es que dependes del modo peculiar en IE: arregla tu diseño para que funcione en todos los navegadores, pero luego mira el estilo específico de IE.

3

Para tratar de justificar este caso de uso, tengo el siguiente escenario:

tengo una plantilla que presta TAL una pequeña portition de la página. entonces yo envuelvo que portition en las etiquetas de los padres de esta manera:

<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> 

De esta manera, esta plantilla es visible TAL/editable como un archivo HTML independiente, por un diseñador. Sin embargo, no se puede omitir el DTD en TAL, por lo que no se puede agregar allí.

Una forma fácil de añadir con JavaScript es así:

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

Si el problema es solamente con IE, ya que también experimentaron el mismo problema, que utiliza el modo de peculiaridades para IE - Sólo tiene que utilizar un comentario antes de la declaración DOC TYPE e IE pasará al modo peculiar.

La otra forma en que puede evitar es primero cargar una secuencia de comandos para detectar el navegador y luego redirigir con el parámetro de los navegadores a la otra página donde puede declarar el doctype dependiente del navegador.

ejemplo de lo que he hecho con mi código es como: -

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

Aquí me han quitado el declearation tipo de documento desde el Browe

10

espero que éste podría ayudar a algunos de ustedes (Probado en consola y cambia DOCTYPE real)

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); 
+0

Gracias Akash, esto me ha ayudado con algo que he estado luchando durante un tiempo en PhantomJS. –

+2

document.implementation.createDocumentType() no está disponible en IE8, que lamentablemente es donde tengo que usarlo en este momento. – flyingace

+0

prueba esto http: // stackoverflow.com/questions/8227612/how-to-create-document-objects-with-javascript –