Comment contourner les contraintes de cross-scripting entre frames

Récemment, un client nous a remonté une problématique particulière : il souhaite publier un contenu de type interstitiel sur sa home page au moyen du module d’Ad Serving de notre suite SmartProfile. Il rencontre une difficulté à masquer le layer du fond (overlay) en cliquant à partir de son contenu.

Pour faire simple, une contrainte de sécurité (évidente) au niveau des navigateurs empêche deux fenêtres (frames ou iframes) de communiquer entre elles si leur domaine n’est pas le même.
Prenons un exemple concret : Une fenêtre principale (fond bleu dans le schéma suivant) affiche un document à partir d’un domaine www.aaa.com.
Ce document contient :

  • la définition d’une fonction javascript, testA() qui affiche un message
  • une iframe (fenêtre fille, fond rouge dans le schéma ci-dessous) dont le code source du document est disponible à partir d’un domaine www.bbb.com. Ce document fait simplement appel à la fonction de la fenêtre mère (fond bleu ; « parent.testA(); »)

Dans ce cas, l’appel est bloqué par le navigateur et la fonction testA() ne sera pas exécutée.

Impossible d'appeler une fonction javascript depuis un cadre qui n'est aps dans le même domaine

En ayant la main sur les 2 domaines, nous avons cependant la possibilité de contourner cette limite très facilement. Dans le sous cadre (fond rouge), nous ajoutons une frame (fond vert dans le schéma ci-dessous) qui va charger un document contenu sur le premier domaine (« www.aaa.com » pour notre exemple) et qui va se charger d’appeler la fonction javascript testA(). De cette façon nous pourrons simuler une interaction entre 2 frames basées sur des domaines différents.

2 cadres de même domaines peuvent interagir !

Réagissez à cet article en laissant un commentaire, partagez le à vos connaissances et inscrivez-vous à notre flux RSS pour être informé dès la parution de nouveaux articles.



Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Le temps imparti est dépassé. Merci de recharger le CAPTCHA.