2012-09-02 13 views
10

Mi chiedevo se iframe HTML potevano ereditare i dati CSS dal loro genitore:Può HTML iframe ereditano CSS e JavaScript dati

main.html

<html> 
    <head> 
    <style> 
    .highlight{ 
     background: #008fcc; 
     } 
    </style> 
    </head> 
<body> 
    <iframe src='frame.html'></iframe> 
</body> 
</html> 

frame.html

hello <font class='highlight'> 
+1

No, non possono. Tuttavia la magia può accadere in <= IE7 – Peter

+16

Nessuna magia può accadere in IE ... solo maledizioni. – Will

risposta

11

Risposta breve: No, iframe s genericamente non può ereditare/accedere a stili/script s dalla loro pagina padre.

Risposta lunga: Non si può cambiare nulla negli stili o eseguire script all'interno di un iframese è venuta da un altro dominio (non si può anche leggere il suo contenuto DOM tramite JavaScript).

D'altra parte, se proviene dallo stesso dominio della pagina padre, è possibile modificare gli stili di elementi o eseguire script, facendo qualcosa di simile a questo nella pagina padre (in questo esempio si utilizza jQuery, ma può essere scritto in modo chiaro JavaScript):

$("#iframe_id").contents().find("#some_div").css({color: "rgb(0, 162, 232)"}); //changed style of a div inside the iframe 

Per eseguire una funzione definita all'interno della iframe:

$("#iframe_id").contents().document.functionName(functionParams); 

Speranza che ha aiutato!

4

È possibile ottenere questo risultato con il parametro booleano html5 senza interruzioni sull'iframe.

https://developer.mozilla.org/en-US/docs/HTML/Element/iframe

ma attualmente non è pienamente implementata in qualsiasi browser moderno.

La soluzione più semplice consiste nel mettere tutti i CSS in un file separato e inserirli sia nella pagina principale che nella pagina iframed.

+1

Questo parametro è ora rimosso http://www.w3schools.com/tags/att_iframe_seamless.asp –

+0

perché mai!?!?! Questo è folle. Non c'è alcun motivo per cui gli script Ajax siano richiesti per qualcosa di così semplice. Sta rendendo impossibile creare siti non js. –