Remplacer tout le document HTML sur place

J’essaie d’éviter d’utiliser un URI de données car je ne souhaite pas que le document généré soit stocké dans l’historique du navigateur. Est-il possible de remplacer l’intégralité du document HTML sur place?

J’ai essayé jQuery("html").html("....") , mais les informations de style ne survivent pas.

Vous voulez probablement faire ceci:

 jQuery("body").html("new content"); 

… où "new content" n’inclurait idéalement que le balisage qui apparaîtrait normalement dans l’élément body et non le rest. Cela remplacera le contenu de l’élément body tout en laissant seul tout ce que vous avez en head (comme les informations de la feuille de style). Si vous souhaitez également mettre à jour le titre, vous pouvez le faire via document.title = "new title";

J’ai commencé à me demander si tout l’élément contenu dans l’élément html devait être remplacé, si cela fonctionnerait et ce qui se passerait. Alors j’ai fait ça:

     Test Page        

Note now this text current appears in a sans-serif, bold, blue font.

Et les résultats ont été assez intéressants – je me suis retrouvé avec une structure DOM qui n’avait ni head ni body , mais html avec les descendants de la head et du body intérieur. C’est probablement ce qui perturbe le (nouveau) style dans le nouveau contenu. J’obtiens essentiellement le même résultat qui donne directement innerHTML (ce qui explique peut-être pourquoi cela ne fonctionne pas dans jQuery; jQuery utilise innerHTML lorsqu’il le peut, même s’il est très sophistiqué de ne pas le faire lorsqu’il ne le peut pas); alors que si je fais quelque chose de similaire en créant explicitement les éléments head et body via document.createElement et document.appendChild , cela fonctionne.

Ce qui signifie presque certainement que cela représente plus d’effort que cela n’en vaut la peine.

Mais notez que changer le contenu des éléments de la head et du body semble bien fonctionner:

     Test Page        

Note now this text current appears in a sans-serif, bold, blue font.

Donc, si vous séparez la "page" que vous chargez dans les parties tête et corps, vous pouvez facilement la mettre à jour sur place.

Non jquery:

 var newSsortingng = [ "" , "" , "" , "" , "" , "

new content

" , "" , "" ].join(""); document.getElementById('myIframeId').contentDocument.documentElement.outerHTML = newSsortingng;