11496 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'ai une iframe important une page d'un autre domaine et j'aimerais savoir s'il est possible de modifier des styles dans le contenu de l'iframe après son chargement ?
J'ai testé
('iframe').load( function() {
    $('iframe').contents().find("head")
      .append($("<style type='text/css'>.class { background: blue !important;} </style>"));
})

et
$('iframe').load( function() {
    $('iframe').contents().find('.class').css('background','blue');
});


Mais rien n'a l'air de fonctionner dans l'iframe. J'ai beau chercher, j'ai vu beaucoup de demandes à ce sujet mais jamais rien de bien concluant. Je finis par me dire que ce n'est juste pas possible Smiley decu

Merci d'avance de votre aide.

Lulu
Ce n'est pas possible, c'est une mesure de sécurité du navigateur, en effet une fenêtre doit avoir la même "origine" pour être autorisée à interagir avec une autre : protocole, domaine et port doivent être semblables.

cf. http://en.wikipedia.org/wiki/Same-origin_policy

Je crois qu'il y a des moyens d'y remédier (en partie), mais il faut pouvoir modifier le code source des deux pages
Bonjour Clair de Lune,
C'est bien ce que je pensais !
Merci beaucoup pour la confirmation Smiley smile

Du coup je clos le sujet.

Lulu
Modérateur
Clair de Lune a écrit :
Je crois qu'il y a des moyens d'y remédier (en partie), mais il faut pouvoir modifier le code source des deux pages


Oui ça s'apelle le CORS, ou Cross-origin resource sharing

Le support est de plus en plus potable: http://caniuse.com/#feat=cors

Il s'agit d'envoyer des en-têtes HTTP, afin de spécifier qui et comment peut aller faire le ninja dans la ressource avec du javascript, iframe, ajax, etc.
l'en-tête pour spécifier l'origine est Access-Control-Allow-Origin

Access-Control-Allow-Origin:  http://monsite.com
 
Bonjour kustolovic,

Cela impliquerait d'avoir la main sur l'html de l'iframe pour y ajouter cette ligne, ce que je ne peux pas malheureusement pas faire Smiley decu

Mais en tout cas c'est super intéressant, je vais me pencher dessus pour plus tard ! Merci beaucoup !

Lulu
Modérateur
Pas sur le HTML, mais sur le langage serveur ou le serveur lui-même, pour envoyer une en-tête HTTP. Mais le principe reste le même. Pour des raisons évidentes de sécurité.