Ich suche nach einer Möglichkeit, den gesamten Inhalt einer Webseite mit reinem Javascript zu entfernen - ohne Bibliotheken.
Ich habe es versucht:
document.documentElement.innerHTML = "whatever";
aber das funktioniert nicht: es ersetzt das Innere des <html/>
-Elements. Ich möchte das gesamte Dokument ersetzen, einschließlich der Deklaration von doctype
und <?xml
, falls möglich.
Ich denke, ein Browser geht zu Recht davon aus, dass eine Seite mit dem Inhaltstyp text/html
immer eine Webseite ist.
document.body.innerHTML = '';
Es wird immer noch etwas HTML herumhängen.
Du könntest es versuchen...
document.documentElement.innerHTML = '';
... was mich mit <html></html>
zurückließ.
Yi Jiang hat etwas Kluges vorgeschlagen.
window.location = 'about:blank';
Dadurch gelangen Sie auf eine leere Seite - ein interner Mechanismus, der von den meisten Browsern meiner Meinung nach bereitgestellt wird.
Ich denke jedoch, dass die beste Lösung darin besteht, document.open()
zu verwenden, wodurch der Bildschirm gelöscht wird.
var i = document.childNodes.length - 1;
while (i >= 0) {
console.log(document.childNodes[i]);
document.removeChild(document.childNodes[i--]);
}
Entfernt alles (auch doctype) unter FF 3.6, Chrome 3.195 und Safari 4.0. IE8 bricht ab, da das Kind sein Elternteil entfernen möchte.
Ein späteres erneutes Aufrufen könnte auch folgendermaßen erfolgen:
while (document.firstChild) {
document.removeChild(document.firstChild);
}
Laut Dotoros Artikel über die document.clear-Methode empfehlen sie (da sie veraltet ist), stattdessen document.open
aufzurufen, wodurch die Seite gelöscht wird, da ein neuer Stream gestartet wird.
Auf diese Weise vermeiden Sie den bösen about:blank
Hack.
Nachdem die Seite bereits vollständig geladen wurde:
document.write('');
document.close();
Ich glaube, das wird es schaffen
document.clear() //deprecated
window.location = "about:blank" //this clears out everything
document.documentElement.innerHTML='';
document.open();
Die Document.open () -Methode öffnet ein Dokument zum Schreiben. Wenn Sie die offene Methode nicht verwenden, können Sie Document nicht ändern, nachdem Sie innerhtml auf leere Zeichenfolge gesetzt haben
Ich glaube, das lässt den doctype-Knoten immer noch hängen, aber:
document.documentElement.remove()
oder das Äquivalent
document.getElementsByTagName("html")[0].remove()