Quelqu'un ici sait comment je peux changer de manière dynamique le doctype avec JavaScript?
J'ai essayé avec cette fonction, p> mais cela ne fonctionne pas. P > p>
6 Réponses :
Je ne pense pas que vous puissiez. RE VOS COMMENTAIRES SUIVANTS: Vous devez gérer ce serveur et servir la page adaptée au navigateur cible. Mais vous ne devriez pas avoir à le faire dans des cas de très franges. P> DOCTYPE code> est en tant que propriété de la documentation W3C, mais c'est en lecture seule. Même si ce n'était pas, je ne peux pas imaginer quel effet changer cela aurait dans les navigateurs du monde réel. P>
À propos de votre dernière phrase («Ils offrent simplement le mode Quirks ou ne dépendent pas de savoir s'il est est i> un doctype, pas ce qu'il est»): Ce n'est pas vrai. Plusieurs Doctypes déclencheront le mode Qiirks, comme le HTML 3.2 ONE L'OP mentionné dans l'un de ses commentaires à sa question. Voir Activer les modes de navigateur avec DOCTYPE .
@Marcel: fascinant. J'ai vu la déclaration "Peu importe qu'il y ait un doctype" tant de fois, je suis étonné de ne pas l'avoir vu contredit auparavant. Table très intéressante, merci. Et vous pouvez voir pourquoi 3.2 serait i> être en mode bizarre, aussi. J'ai enlevé la phrase, merci encore.
Ce dont vous avez besoin est: p>
https://developer.mozilla.org/fr/dom/domimplementat.CreateDocumentType de p>
retourne un objet documentaireType qui peut être utilisé soit avec DomImplementat.CreateDocument à la création de documents, soit ils peuvent être mis dans le document via Node.SerserBefore () ou Node.Replacechild (): EM> P> P > document.doctype est une propriété en lecture seule code>, et non une méthode, apparemment selon MDC. P>
CaredocumentType code> n'est pas disponible dans tous les navigateurs. Le chrome ne l'a pas.
30 mars 2013: chrome l'a, et IE9 +
Même si vous le pouviez, votre code s'exécuterait une fois que la page a déjà décidé de restituer à quel cas l'effet de la modification du doctype n'est rien. Le seul moyen que je puisse imaginer des navigateurs modernes ayant des problèmes de DOCTYPE, c'est que vous comptez sur le mode Qiirks dans IE - corrige votre conception au travail pour tous les navigateurs, mais c'est-à-dire, puis examinez le style spécifique. P>
Pour essayer de justifier ce cas d'utilisation, j'ai le scénario suivant:
J'ai un modèle TAL qui rend une petite portion de la page. J'enveloppe ensuite cette portion dans des balises parent comme ceci: p> De cette façon, ce modèle TAL est visible / modifié comme un fichier HTML autonome, par un concepteur. On ne peut pas omettre la DTD dans TAL cependant, il ne peut donc pas être ajouté là-bas. P> Un moyen facile de l'ajouter avec JavaScript est comme celui-ci: P> if (!document.doctype) {
document.write('<!doctype HTML>\n' + \
document.head.outerHTML + \
document.body.outerHTML);
}
Si le problème est uniquement avec IE, comme je l'ai également expérimenté le même problème, j'ai utilisé le mode Qiiks pour IE - il suffit d'utiliser un commentaire avant que la déclaration de type DOC et c'est-à-dire entrer dans le mode Qiiks.
L'autre façon que vous Peut fonctionner est d'abord pour charger un script pour détecter le navigateur, puis rediriger avec le paramètre Navigateurs sur l'autre page où vous pouvez déclarer le navigateur dépendant du doctype. P>
Exemple de ce que j'ai fait avec mon code avec mon code est comme : - p>
<!--[if lt IE 9]> <![endif]--> <![if gte IE 9]> <!DOCTYPE html> <![endif]>
J'espère que celui-ci pourrait aider certains d'entre vous (testés dans la console et modifier la doctype réelle)
Merci Akash, cela m'a aidé avec quelque chose que je me suis battu avec pendant un moment à Phantomjs.
Document.Implementalation.CreateDocumentType () n'est pas disponible dans IE8, ce qui est malheureusement, où j'ai besoin de l'utiliser pour le moment.
Essayez ce Stackoverflow.com/ Questions / 8227612 / ...
@Akashsaikia Saikia serait mieux de mettre ce script dans window.load code> ou "document.ready
? code> window.load`, non?
@ JIM22150 Yep, il serait agréable d'attendre que la DOM réelle se charge avant d'essayer d'accéder à une partie de l'objet de document.
Il semble que le document.CreateDocumentType () n'est pas disponible dans IE8, IE9 ou IE 11. Je n'ai pas été testé dans IE10. Quelqu'un peut-il confirmer si cela est vrai?
Il modifie le texte de DOCTYPE dans l'onglet Inspecteur, mais rien de plus, si vous modifiez DOCTYPE de HTML4 en HTML5 ou de XHTML en HTML, il se comporterait toujours en fonction de l'ancien Doctype. Testé dans Firefox 51
Juste curieux, pourquoi voudriez-vous faire cela?
Eh bien, je veux changer le doctype si le navigateur est Firefox ou Opera. J'ai eu le code de détection du navigateur qui fonctionne.
Même si vous pouviez, quel effet vous attendez-vous? IIRC, le navigateur ne considère que le doctype une fois, quand il analyse la page.
Ceci est réadonly selon développeur.mozilla.org/fr/dom/document.doctype " a> et devguru.com/technologies/xmldom/quickref/document_doctype.ht ml
La vraie raison en est que, la conception que j'ai créée est simplement gâchée dans différentes brouillards et que j'ai découvert que, en utilisant différents doctypes de différentes brouilleurs, la page a l'air d'OKI.
La détection du navigateur est plutôt peu fiable: vérifiez-vous si Opera Mini ne jette pas de faux positifs? Qu'en est-il de Chrome (et d'autres navigateurs Webkit)?
Eh bien, j'ai vérifié avec Opera, Chrome, Firefox, IE8 et Safari. Le navigateur qui me donne des problèmes est IE8, Firefox et Opera.
En utilisant, w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd "> Je suis alors capable Pour résoudre le problème IE8, mais gâcher Opera et Firefox. En utilisant Je suis capable de réparer le problème de Firefox, mais gâchez-vous IE8 et Opera. En utilisant w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd "> Je suis capable de réparer le problème de l'opéra, je suis capable de réparer l'opéra et IE8 mais gâcher Firefox
Mana, plutôt que de tester chaque doctype possible ou d'essayer de le changer à la volée (ce qui n'est pas possible, ou cela ne ferait pas la différence), essayez de poser des questions sur les problèmes réels que vous avez (y compris les parties pertinentes de la Code source et de préférence un lien vers une page d'exemple problématique), afin que nous puissions les réparer, au lieu de sélectionner de manière conditionnelle des modes de navigateur, ce qui n'est pas une bonne idée (toujours (toujours (Toujours) d'utiliser le mode de normes). Fyi, lisez Activer les modes de navigateur avec DOCTYPE .