Hay cosas en la document
que no está muy relacionado con el árbol DOM que contiene, como document.cookie
, location
y URL
. Es mucho más seguro si no podemos reemplazar objetos globales como window
y document
.
Pero lo que está buscando se puede lograr de manera efectiva mediante la sustitución de la principal document
's documentElement
con los otros document
' s documentElement
. Se tendrá exactamente el mismo efecto que se busca. *
document.replaceChild(
document.importNode(newdoc.documentElement, true),
document.documentElement
);
En cuanto a las razones para hacerlo, me he encontrado hasta ahora one que no se puede lograr con un iframe.
* Tenga en cuenta que si los doctypes son diferentes, tendría que reemplazar el nodo doctype del documento principal por el nodo doctype del otro documento por separado.
Probablemente no pueda. 'window.document' en sí mismo es de solo lectura y no hay métodos en' window' para cambiar su 'document' vinculado. Sin embargo, no pude encontrar ninguna fuente para justificar mi suposición. – copy
Pensé lo mismo, pero podría haber algo por ahí. Quiero decir, ¿cuál es el sentido de crear un nuevo documento si no puedes inyectarlo en una ventana? Tal vez puede inyectarlo en una nueva ventana/iframe – Raynos
Sí, puede insertarlo en un iframe, ese es el [ejemplo de MDN] (https://developer.mozilla.org/en/DOM/DOMImplementation.createHTMLDocument) para createHTMLDocument (__Update__: No directamente, pero puedes jugar con 'importNode' y' replaceChild (importedDocumentElement, document.documentElement) '). También se puede usar para analizar el HTML que obtienes de una solicitud http (y luego tienes una representación DOM de eso). – copy