2010-11-22 6 views
13

Je suis à la recherche d'un moyen de supprimer tout le contenu d'une page Web en utilisant Javascript pur - pas de bibliothèques.Supprimer tout le contenu en utilisant JS pure

J'ai essayé:

document.documentElement.innerHTML = "whatever"; 

mais cela ne fonctionne pas: il remplace l'intérieur de l'élément <html/>. Je cherche à remplacer le document entier, y compris si possible la déclaration doctype et <?xml.

+10

'location = 'environ: blank'' –

+0

À quelle fin? Javascript fonctionne sur le DOM qui est un niveau plus élevé que la sérialisation HTML sous-jacente (c'est-à-dire où le

+0

@Yi Jiang Cela fonctionne, mais je veux vraiment rester sur le même domaine ... –

Répondre

22

Je pense qu'un navigateur suppose à juste titre une page avec un contenu de type text/html sera toujours une page Web - donc pendant que vous pouvez faire quelque chose comme ...

document.body.innerHTML = ''; 

Il aura encore quelques HTML traîner.

Vous pouvez essayer ...

document.documentElement.innerHTML = ''; 

... qui m'a laissé avec <html></html>.

Yi Jiang a suggéré quelque chose d'intelligent. Cela vous amènera à une page blanche - un mécanisme interne fourni par la plupart des navigateurs, je crois.

Je pense cependant que la meilleure solution est d'utiliser document.open() qui effacera l'écran.

+0

La première réponse mise à jour était la moitié de ce que je cherchais. Mais je suppose que changer le 'doctype' demande un peu trop ... –

+1

@passcod Une fois que vous changez le doctype aussi, vous changez la façon dont le navigateur affichera votre code HTML/CSS. Cela entraînera * probablement * un rechargement de page. Je ne pense pas que vous pouvez changer un doctype à la volée. – alex

+1

@alex changement ** window.location ** à ** 'environ: vide' ** a un problème avec IE specialy IE10 parce que certains addons lors de la détection ** sur: vide ** page le remplir avec leur contenu – iman

0

Je crois que ce sera le faire

document.clear() //deprecated 

window.location = "about:blank" //this clears out everything 
+0

Cela n'a pas fonctionné pour moi, mais j'ai essayé sur jsbin.com qui peut faire quelque chose d'autre dans les coulisses. – alex

+0

@alex ..yeah Je viens de réaliser que document.clear() a été abandonné. –

+0

@John Hartsock changeant ** window.location ** à ** 'à propos de: blank' ** a un problème avec IE specialy IE10 parce que certains addons lors de la détection ** about: blank ** page le remplir avec leur contenu – iman

0

Im juste curieux de savoir pourquoi vous voulez faire cela. Maintenant, il n'y a aucun moyen que je sache de remplacer absolument tout à la déclaration doctype, mais si vous voulez aller à ces longueurs, pourquoi ne pas rediriger l'utilisateur vers une page spécialement conçue qui a le modèle dont vous avez besoin avec le doctype dont vous avez besoin remplir le contenu là-bas?

EDIT: en réponse à un commentaire, ce que vous pouvez faire est de supprimer tout le contenu, puis créer un iframe pour qu'il remplisse toute la page, et vous avez un contrôle total sur le contenu. Sachez que c'est un grand bidouille et sera probablement très douloureux - mais il travaillerait :)

+0

qui a demandé les raisons ... Cela a semblé être un moyen facile de tout effacer et de partir de zéro dans un script d'utilisateur ... Je peux inclure n'importe quel code JS que je veux, et il fonctionnera dans la page, pas dans un bac à sable. La chose 'doctype' est pour quand je veux utiliser xhtml sur un site Web html. –

+1

En fait, la solution de Steve est géniale ... il suffit de modifier quelques trucs pour inclure le 'doctype' ... –

+0

yep ses sons bien si vous n'avez pas besoin de support IE –

3
var i = document.childNodes.length - 1; 

while (i >= 0) { 
    console.log(document.childNodes[i]); 
    document.removeChild(document.childNodes[i--]); 
} 

supprime tout (doctype aussi) sur FF 3.6, Chrome 3,195 et Safari 4.0. IE8 se brise depuis que l'enfant veut retirer son parent.


Revisiter un peu plus tard, pourrait aussi être fait comme ceci:

while (document.firstChild) { 
    document.removeChild(document.firstChild); 
} 
+0

Ça me va bien et ça marche aussi pour moi. – alex

+0

Super, mais vous ne pouvez toujours pas changer le doctype ... ce qui n'a pas beaucoup d'importance. Firefox s'est écrasé quand j'ai essayé ... –

+1

Est-ce que votre question "Comment changer le doctype" ou "Supprimer tout le contenu avec JS pur"? – Ben

1

Une fois la page a déjà complètement chargé:

document.write(''); 
document.close(); 
+0

Non, ne fonctionne pas. –

+0

@passcod - votre test est incorrect. Cela fonctionne bien. – Alohci

+1

Vous pouvez simplement utiliser 'document.open()'. – alex

2

Selon Dotoro's article on the document.clear method, ils (car il est dépréciée) recommande d'appeler document.open à la place, ce qui efface la page, car il démarre un nouveau flux.

De cette façon, vous évitez le vilain about:blank hack. !

-2

RETIRER TOUT MAIS --- DOCTYPE html ---

var l = document.childNodes.length;  
while (l > 1) { var i = document.childNodes[1]; document.removeChild(i); l--; } 

TESTÉ SUR FIREFOX WEB INSPECTEUR - childNodes [1] EST --- DOCTYPE html ---

0
document.documentElement.innerHTML=''; 
document.open(); 

La méthode Document.open() ouvre un document en écriture. si vous n'utilisez la méthode ouverte, vous ne pouvez pas modifier le document après mis innerHTML à une chaîne vide

+1

Vous devriez expliquer pourquoi cela fonctionne. – ryanpcmcquen

0

Je crois que cela laissera encore le nœud DOCTYPE traîner, mais:

document.documentElement.remove()

ou l'équivalent

document.getElementsByTagName("html")[0].remove()

Questions connexes