2009-09-29 14 views
6

¿Cómo puedo insertar todas las hojas de estilo de una ventana principal en la cabecera de un iframe (samedomain)?jquery insertando todas las hojas de estilo en iframe

Mi intento de código basado en una pregunta similar:

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

Es evidente que esto no funciona fuera del IE. Gracias por adelantado.

Editar: Intento basado en la respuesta de Anthony:

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

escrito por la primera función, lo que crea dudas, iframes contiene HTML o está en blanco? –

Respuesta

3

un problema con la respuesta seleccionada es que utiliza .html(), que devuelve sólo el contenido HTML interno de ese elemento, no el propio elemento. Aquí hay una solución de trabajo:

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

El atributo de tipo es opcional en las etiquetas de enlace de hoja de estilo en HTML5, mejor para usar '$ (" enlace [rel = 'hoja de estilo'] ")'. –

+0

O vaya para la trifecta completa: '$ (" 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

te refieres a this.clone ¿verdad? Porque de lo contrario, eso movería la hoja de estilo. Aún así, no estoy logrando que esto funcione. – Mark

+0

No, quise append, pero también quise especificar para anexar el html, lo siento. ¿La edición funciona? De lo contrario, asegúrese de que el selector iframe funcione. Algo simple como 'alert ($ (" iframe "). Contents(). Find (" title "). Text()'. El código del iframe es directo de jquery. – Anthony

+0

Lo siento, he metido un poquito, pero el vers Tengo en la pregunta que funcionaría. Gracias. – Mark

Cuestiones relacionadas