2016-10-08 1 views
0

Je voudrais réécrire le contenu <html> en utilisant Greasemonkey.Réécrire <html> contenu

J'ai essayé ceci:

document.open() 
document.write(html) 
document.close() 

ne fonctionne pas.

document.body.innerHTML = html ne remplace que le contenu.

Quelques suggestions?

Répondre

2

N'utilisez pas document.write(). Il a toutes sortes de restrictions de sécurité (en raison d'abus par les méchants) et est fraught with pitfalls.

si vous essayez de l'utiliser, comme dans votre question, dans un script d'utilisateur; Firefox bloquera généralement la page complètement ou entrera dans un cycle perpétuel - selon le moment où votre script se déclenchera et si vous utiliserez unsafeWindow.stop().
Ce type de code fonctionne toujours dans Chrome (pour l'instant), mais reste une mauvaise pratique. Je ne suis pas sûr des autres navigateurs.

L'approche correcte consiste à utiliser des méthodes DOM. Par exemple:

var D  = document; 
var newDoc = D.implementation.createHTMLDocument ("My new page title"); 
window.content = newDoc; 

D.replaceChild (
    D.importNode (newDoc.documentElement, true), 
    D.documentElement 
); 

D.body.innerHTML = '<h1>Standby...</h1>'; 

Pour de meilleures performances, vous pouvez également utiliser:

// @run-at  document-start 
// @grant  unsafeWindow 

puis placez un unsafeWindow.stop(); en haut du code userscript.




Re: "How do I rewrite the head content with this solution?":

Cet exemple réécrit déjà le <head>. La nouvelle tête sera:

<head><title>My new page title</title></head> 

dans ce cas.

Pour ajouter des éléments de tête supplémentaires, utilisez le code DOM comme:

var newNode  = D.createElement ('base'); 
newNode.href = "http://www.example.com/dir1/page.html"; 
var targ  = D.getElementsByTagName ('head')[0]; 
targ.appendChild (newNode); 

Sauf:

  1. Il suffit d'utiliser GM_addStyle() pour créer facilement <style> nœuds. Ajouter <script> nœuds est presque toujours inutile dans votre scénario. Il suffit que votre script utilisateur effectue le traitement JS nécessaire.
  2. Certaines balises comme <meta> seront ajoutées mais pas traitées (en particulier dans Firefox). Selon les paramètres, ceux-ci sont analysés uniquement sur la charge initiale d'un serveur.
+0

Comment réécrire le contenu de la tête avec cette solution? – mykiwi

+0

@mykiwi Exécutez simplement le code. Le code HTML que vous voulez est dans 'D.body.innerHTML = '

Veille ...

'; '. –

+0

@mykiwi, voir la réponse mise à jour. –