2009-09-29 6 views
6

Comment puis-je insérer toutes les feuilles de style d'une fenêtre parent dans une tête iframe (samedomain)?jquery insertion de toutes les feuilles de style dans iframe

Mon code tentative basé sur une question similaire:

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(); 
} 

Il est clair que cela ne fonctionne pas en dehors de IE. Merci d'avance.

Edit: Tentative basée sur la réponse de Anthony:

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

écrit par la première fonction, ce qui crée un doute, iframes contient HTML ou sont vides? –

Répondre

3

Un problème avec la réponse choisie est qu'il utilise .html(), qui renvoie uniquement le contenu html interne de cet élément, et non l'élément lui-même. Voici une solution de travail:

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

L'attribut de type est facultatif sur des balises de lien de feuille de style en HTML5, mieux utiliser '$ (" link [rel = 'stylesheet'] ")'. –

+0

Ou optez pour le tiercé complet: '$ (" link [rel = 'stylesheet'], lien [type = 'text/css'], lien [href $ = '. css'] ")' –

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

vous voulez dire this.clone non? Parce que sinon cela déplacerait la feuille de style. Pourtant, je ne fais pas ça pour fonctionner. – Mark

+0

Non, je voulais dire append, mais je voulais aussi spécifier d'ajouter le code HTML, désolé. Est-ce que l'édition fonctionne? Sinon, assurez-vous que le sélecteur iframe fonctionne. Quelque chose de simple comme 'alert ($ (" iframe "). Contents(). Find (" title "). Text()'. Le code iframe vient directement de jquery – Anthony

+0

Désolé, j'ai foiré quelque chose, mais les vers J'ai dans la question fonctionnerait – Mark

Questions connexes