2009-09-29 5 views
6

Wie kann ich alle Stylesheets eines übergeordneten Fensters in den Kopf eines iframes (samedomain) einfügen?jquery Einfügen aller Stylesheets in iframe

Mein versucht Code basiert auf einer ähnlichen Frage:

function() { 
    var d = frames[0].document; 
    var stylesheets = $("link").outerhtml; 
    d.open(); 
    d.write(
    '<html><head>'+ 
    stylesheets + 
    '<style type="text/css">'+ 
    '<\/style><\/head><body><\/body><\/html>' 
    ); 
    d.close(); 
} 

Offensichtlich funktioniert das nicht außerhalb des IE. Danke im Voraus.

Edit: Der Versuch basiert auf Anthonys Antwort:

$("link[type='text/css']").each(function() { 
     var stylesheet = $(this).clone();          
     $("iframe").contents().find("head").append(stylesheet); 
    }); 
+0

geschrieben von der ersten Funktion, die Zweifel schafft, tun Iframes HTML enthält oder leer sind? –

Antwort

3

Ein Problem mit der gewählten Antwort ist, dass es .html() verwendet, das gibt nur den inneren html Inhalt dieses Element, nicht das Element selbst. Hier ist eine funktionierende Lösung:

$("link[type='text/css']").clone().appendTo($("iframe").contents().find("head")); 
+2

Das type-Attribut ist optional auf Stylesheet-Link-Tags in HTML5, besser zu verwenden $ ("link [rel = 'stylesheet']"). –

+0

Oder gehen Sie für die volle trifecta: '$ (" link [rel = 'stylesheet'], link [type = 'text/css'], link [href $ = '. css'] ")' –

0
$("link[type='text/css']").each(function() { 
    var stylesheet = $(this).html(); 
    $("iframe").contents().find("head").append(stylesheet); 
    }); 
+0

meinst du das.klon richtig? Weil sonst das Stylesheet verschoben würde. Trotzdem, ich werde das nicht zur Arbeit bringen. – Mark

+0

Nein, ich meinte append, aber ich wollte auch angeben, den HTML-Code anzuhängen, sorry. Funktioniert die Bearbeitung? Wenn nicht, stellen Sie sicher, dass der Iframe-Selektor funktioniert. Etwas einfaches wie 'alert ($ (" iframe "). Contents(). Find (" title "). Text()'. Der iframe-code ist direkt von jquery. – Anthony

+0

Sorry, ich vermasselte etwas kleines Ding, aber die vers Ich habe in der Frage funktioniert. Danke. – Mark