2011-01-01 24 views
6

Ich muss den gesamten Inhalt von Iframe aus der gleichen Domäne erhalten. Whole content bedeutet, dass ich alles von <html> (einschließlich), nicht nur <body> Inhalt will. Inhalt wird nach dem Laden geändert, so kann ich es nicht noch einmal vom Server bekommen.Wie bekomme ich den gesamten iframe-Inhalt?

+0

Versuchen Sie, alle Ressourcen irgendwo im Browser zu speichern oder was möchten Sie erreichen? – BastiBen

+0

Ich muss den geänderten Inhalt an den Server senden. – jesper

Antwort

15

Ich glaube ich habe die beste Lösung gefunden:

var document = iframeObject.contentDocument 
var serializer = new XMLSerializer(); 
var content = serializer.serializeToString(document); 

In content wir voll iframe Inhalt, einschließlich DOCTYPE Element, das in bisherigen Lösungen fehlte. Und außerdem ist dieser Code sehr kurz und sauber.

+0

Vielen Dank. – rsharpy

+0

Das ist total falsch, Sie haben ein Semikolon verpasst :) Vielen Dank. –

+0

Ein Problem, das ich mit diesem Ansatz habe, ist, dass es den Iframe-Inhalt codiert. Alles wird HTML-kodiert einschließlich zum Beispiel Schriftart-Familie Stile. Wenn Sie ein Style-Tag mit font-family als "Courier New", Courier, Monospace definiert haben, werden die doppelten Anführungszeichen codiert. – Marko

7

Wenn es auf der gleichen Domäne ist, können Sie nur

iframe.contentWindow.document.documentElement.innerHTML 

den Inhalt des iframe zu erhalten, mit Ausnahme der <html> und </html> Tag, wo

iframe = document.getElementById('iframeid'); 
+0

Ich brauche auch '' Tag mit allen Attributen. – jesper

+0

Sie können das Attribut 'iframe.contentWindow.document.documentElement' durchlaufen, um das umschließende HTML-Tag zu erstellen (oder verwenden Sie das nicht standardmäßige' outerHTML'). Ein Beispiel für einen browserübergreifenden Code finden Sie hier: http://help.dottoro.com/ljloliex.php. – Thai

+1

Die erste Lösung ist weniger akzeptabel (OuterHTML kann nicht verwendet werden, weil FF dies nicht unterstützt). Es wäre einfacher, wenn jQuery mir erlaubte, das erzeugte 'html'-Tag in ein anderes" wrapper "-Tag zu verpacken und die' html() '-Methode auf diesem Wrapper zu verwenden ... Natürlich kann der Knoten nicht an dem angegebenen Punkt in der Hierarchie eingefügt werden " – jesper

1
$('input.test').click(function(){ 
    $('textarea.test').text($('iframe.test').contents()); 
}); 
0

Sie können die literale Quelle von jeder Datei in der gleichen Domäne mit Ajax erhalten, die das html nicht zuerst -

rendert

//

function fetchSource(url, callback){ 

    try{ 
     var O= new XMLHttpRequest; 
     O.open("GET", url, true); 
     O.onreadystatechange= function(){ 
      if(O.readyState== 4 && O.status== 200){ 
       callback(O.responseText); 
      } 
     }; 
     O.send(null); 
    } 
    catch(er){} 
    return url; 
} 
function printSourceCode(text){ 
    var el= document.createElement('textarea'); 
    el.cols= '80'; 
    el.rows= '20'; 
    el.value= text; 
    document.body.appendChild(el); 
    el.focus(); 
} 

fetchSource (location.href, printSourceCode);

+0

" Inhalt wird nach dem Laden geändert, so dass ich es nicht noch einmal vom Server bekommen kann. " – jesper

Verwandte Themen