2010-06-27 5 views
2

je produis une partie du contenu HTML comme dynamiquement:Comment afficher la page html de chaîne

var content = "<head><title>testtitle</title></head><body>testbody</body>"; 

Alors je me suis obtenir un nouvel onglet avec about:blank, et maintenant je veux afficher mon code HTML généré dans cet onglet. Si contentDocument de l'onglet est newDoc, je pensais que je viens de faire:

newDoc.documentElement.innerHTML = content; 

Cependant, cela ne fonctionne pas. Cela semble n'avoir aucun effet. Dans firebug, il semble fonctionner une fois, mais vissez firebug en même temps, donc je ne peux pas vérifier, la vue de la source reste inchangé.

J'ai ensuite essayé:

newDoc.getElementsByTagName("head")[0].innerHTML = headContent; 
newDoc.body.innerHTML = bodyContent; 

Ce qui ne change pas la page vide affichée, pas non plus dans la vue source, mais si j'alerter newDoc.documentElement.innerHTML, il reflète les changements. Il semble que ce n'est pas le document qui est affiché. Bizarre.

Alors ma question: comment je fais ça? Spécifiquement dans une extension firefox, si c'est important.

Y at-il peut-être un format href avec "texte: // ..." au lieu de "fichier: // ..." ou quelque chose?

Mise à jour:

Il se trouve que je peux non seulement remplacer le code complet de cette façon, je ne peux même pas body.appendChild, mais je suis sûr que je l'ai fait avant, donc je compare . Ici, je reçois mon document de cette façon:

var tab = getBrowser().addTab(); //make new tab 
getBrowser().selectedTab = tab; //bring it to front 
var browser = getBrowser().getBrowserForTab(tab); //get the window of the tab 
var newDoc = browser.contentDocument; 

Maintenant, je peux faire:

newDoc.location.href = url; 

Et cela fonctionne, il charge la page donnée. J'ai donc pensé que c'était le bon document, mais si je n'attribue pas d'URL, mais que j'essaye plutôt de construire moi-même le dom, ça ne marche tout simplement pas.

Si je fais ces changements à window.content.document après que l'onglet soit devant, cela fonctionne. Alors, comment se fait-il que ces documents soient différents? Si newDoc est le mauvais, comment assigner un emplacement fait quoi que ce soit?

Bien que je puisse le faire fonctionner maintenant, je n'aime pas particulièrement la solution d'obtenir le document en amenant l'onglet à l'avant, puis en saisissant le document window.content, qui se sent comme un hack et dépend du timing .

+6

Oui, il est important que vous parliez d'une extension Firefox, car le modèle de programmation est très différent de la programmation dans le contenu Web. – Pointy

Répondre

0

Je viens de trouver une méthode jQuery utile qui pourrait arriver: http://api.jquery.com/html/#html2

J'ai créé une page avec un bouton qui appelle le script:

$("html").html("<span>Hello <b>World</b></span>"); 

Cela remplace toute DOM page.

+2

Il a dit qu'il écrit une extension Firefox. –

Questions connexes