2009-09-02 7 views
0

Je sais que vous pouvez obtenir le innerHTML faire quelque chose comme ça, avec jQuery,Comment puis-je récupérer tout le contenu exact d'un iframe et pouvoir le modifier?

$('iframe').load(function(){ 
    alert($(this).contents().find('body').html()); 
}); 

Cela obtient le innerHTML de la balise body. Mais je veux tout. Je veux le tag HTML et le doctype. Le code source entier essentiellement. Et je veux être en mesure de l'éditer dans son ensemble aussi. Par « dans son ensemble », je veux dire que je veux être en mesure de faire quelque chose comme cela,

$('iframe').html('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
    <title>title</title> 
</head> 
<body> 
hello world 
</body> 
</html>'); 

Comment puis-je faire?

Note: Je me rends compte DOM est traitée différemment dans les différents navigateurs et donc le innerHTML de l'Opéra sera différent de celui de Firefox. Mais ce n'est pas un gros problème.

Répondre

0

Je suppose que ce document que vous accédez est sur le même serveur? Évidemment, pouvoir accéder (et modifier!) Le contenu d'un autre site serait très dangereux.

$('iframe').contentWindow.document.documentElement.outerHTML contiendra la balise HTML complet et son contenu. outerHTML n'est pas exactement inter-navigateur, et vous pouvez analyser les attributs de l'objet documentElement à la place. Notez que vous ne pouvez pas modifier le fichier outerHTML (au moins dans WebKit), vous pouvez donc utiliser innerHTML pour modifier le contenu.

$('iframe').contentWindow.document.doctype représente le DOCTYPE. Vous ne pouvez pas obtenir le tag réel, mais vous pouvez récupérer les informations de ses attributs. Here est la référence MSDN pour l'élément! DOCTYPE.

+1

jQuery ne dispose pas d'une propriété 'contentWindow' ... – geowa4

+0

aussi,' documentElement'? Aller à la vieille école? – geowa4

+0

Oui c'est dans le même serveur. – fent

0

document.write est votre ami.

Par exemple:

var iframeEl = document.createElement('iframe'); 
document.body.appendChild(iframeEl); 

var oFrame = window.frames[window.frames.length - 1]; 
oFrame.document.write('<html><head><title>foo</title></head><body>bar</body></html>'); 

oFrame.document.body.innerHTML; // "bar" 
+0

oFrame.document n'est pas x-browser; utilisez 'oFrame.contentDocument || oFrame.contentWindow.document' – geowa4

+0

@ geowa4 Pas exactement. Vous confondez la propriété 'contentDocument' de' HTMLIframeElement' - http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-67133006 avec la propriété 'document' de l'objet' Window' (disponible grâce à la collection 'window.frames'). Notez que j'accède au document via l'objet de fenêtre correspondant à iframe, et non via la propriété 'contentDocument' de l'élément iframe. – kangax