7
votes

Comment remplacez-vous le document dans une fenêtre?

var newDoc = document.implementation.createHTMLDocument('someTitle');
// swap newDoc with document
DOMImplementation.createHTMLDocument
Is it possible to swap the current document for a new document?
Is there any reasonable reason to do this?

5 commentaires

Vous ne pouvez probablement pas. window.document est réadonné et il n'y a pas de méthodes sur fenêtre pour modifier son document lié . Je ne pouvais trouver aucune source pour justifier mon hypothèse cependant.


Je pensais la même chose mais il pourrait y avoir quelque chose là-bas. Je veux dire quel est le point de créer un nouveau document si vous ne pouvez pas l'injecter dans une fenêtre. Peut-être que vous pouvez l'injecter dans une nouvelle fenêtre / iframe


Oui, vous pouvez l'injecter dans un iframe, c'est le exemple de MDN pour CreateHTMLDocument ( MISE À JOUR : Pas directement cependant. Mais vous pouvez jouer avec ImportNode et Remplacement (ImportedDocumentation, document.documentalement) ). Il peut également être utilisé pour analyser HTML que vous obtenez à partir d'une demande HTTP (puis une représentation DOM de celle-ci).


@Raynos J'ai parlé avec vous dans la salle de discussion PHP avant. J'espère que tu vas bien. Merci pour le conseil avant. Vous êtes un mec cool.


@Copy Un document et un document sont radicalement différents. (essayez document.pototype.isprototypeof (document.documentation qui est faux)


3 Réponses :


6
votes

Vous ne pouvez pas remplacer l'objet de document actuel ni aucun objet de document avec l'objet Créé Créé avec CreateHTMLDOCUMUME Méthode.

Le CreateHtMldocument a été introduit pour la première fois dans l'un des brouillons du noyau DOM , mais a ensuite été retiré de la recommandation finale.

Il a été ajouté plus tard à la spécification HTML5 car il n'y avait pas de moyen programmatique de créer un document HTML.

Certains des cas d'utilisation fournis pour la création programmatique d'un document HTML étaient,

  • Créez un document HTML non rendu pour télécharger via XMLHTTPQUEST (au lieu de Envoi d'un document XML).

  • Feature-tester le DOM HTML dans le code de la bibliothèque d'une manière qui est garantie Évitez les effets secondaires sur le document affiché.

  • créer un document non rendu isolé d'une zone d'édition de texte riche, de sorte que Le nettoyage côté client peut être effectué avant de télécharger sans déranger le vivant DOM que l'utilisateur peut toujours modifier davantage.

  • Mettre en œuvre HTML5 ALGORITHM CLIENT-CÔTÉ-CLIENT AU JAVASCRIPT POUR TEST ET objectifs de comparaison, ou pour la sécurité de la virtualisation ou de l'objet-capacité basée sur la capacité.

    Un iframe invisible peut être utilisé pour la plupart de ces objectifs, mais c'est plus coûteux en termes de ressources. Liste de diffusion W3C

    La conversation sur les listes de diffusion W3C qui ont apporté la méthode dans la spécification, [Bug 7842] NOUVEAU: Aucun moyen programmatique de créer un document HTML - envisagez d'ajouter CreateHTMLDocument


0 commentaires

2
votes

Si vous serialisez le document sur HTML, vous pouvez remplacer le document de la page en cours avec document.open , document.write et document.Close .

En fait, vous pouvez même modifier le mode Qiirks en mode standard en ajoutant un .

Par exemple: http://jsbin.com/anusul/2 xxx

Je ne conseillerais pas C'est une telle supercherie sans scénario spécial, mais cela fonctionne.

Source: Interrupteur JavaScript de Quirksmode à Standard + Besoin d'aide Avec: jQuery prépend DocType à HTML


2 commentaires

Ce n'est pas très intéressant, car vous devez utiliser une chaîne HTML. J'étais plus intéressé par l'utilisation d'un élément de document


Lorsque vous vous référez à la question initiale, cela vous permet de remplacer un document. Sa compréhension si ce n'était pas ce que vous recherchiez dans le contexte de DomImplementat.CreatehtMldocument



4
votes

Il y a des choses dans le document qui n'est pas vraiment lié à l'arbre DOM qu'il contient, telle que document.cookie , emplacement et url . Il est beaucoup plus sûr si nous ne pouvons pas remplacer des objets globaux tels que fenêtre et document .

Mais ce que vous recherchez peut être efficacement réalisé en remplaçant le document principal < / Code> 'S DocumentElement avec l'autre document ' S documentation . Il aura exactement le même effet que vous recherchez. * xxx

comme pour les raisons de le faire, j'ai jusqu'à présent trouvé qui ne peut pas être obtenu avec un iframe.

* Notez que si les Doctypes sont différents, vous devez remplacer le Doctype du document principal noeud avec le nœud DOCTYPE de l'autre document séparément.


0 commentaires