Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

HTMLIFrameElement : propriété contentWindow

Baseline Widely available

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis ⁨juillet 2015⁩.

La propriété contentWindow retourne l'objet Window d'un élément HTML <iframe>.

Cet attribut est en lecture seule.

Valeur

Un objet Window.

Description

L'accès à Window retourné par contentWindow est soumis aux règles définies par la politique de même origine, ce qui signifie que si le cadre intégré (iframe en anglais) est de même origine que le parent, alors le parent peut accéder au document du cadre intégré et à son DOM interne, et s'ils sont d'origines différentes, il obtient un accès très limité aux attributs de la fenêtre. Voir Accès API script inter-origine pour plus de détails.

Les pages peuvent aussi utiliser cette propriété pour savoir quel cadre intégré a envoyé un message avec Window.postMessage(), en la comparant à la propriété source de l'évènement message.

Exemples

Accéder au document d'un cadre intégré

Cet exemple modifie l'attribut style du corps du document.

Notez que cela ne fonctionne que si la fenêtre du cadre intégré (iframe en anglais) est de même origine que son parent : sinon, toute tentative d'accès à contentWindow.document lèvera une exception.

js
const iframe = document.querySelector("iframe").contentWindow;

iframe.document.querySelector("body").style.backgroundColor = "blue";
// ceci devrait changer le 1er iframe dans le document bleu.

Associer la source d'un message à un cadre intégré

Cet exemple peut s'exécuter dans une page qui héberge plusieurs cadres intégrés (iframe en anglais), dont chacun peut lui envoyer des messages via Window.postMessage(). Lorsque la page reçoit un message, elle souhaite savoir quel cadre intégré contient la fenêtre qui a envoyé le message.

Pour cela, lorsqu'elle reçoit un message, la page vérifie d'abord que le message provient de l'origine attendue, puis trouve le cadre intégré qui est la source du message en comparant la propriété source de l'évènement message avec la propriété contentWindow du cadre intégré.

js
const expectedOrigin = "https://example.org";

const iframes = Array.from(document.querySelectorAll("iframe"));

window.addEventListener("message", (e) => {
  if (e.origin !== expectedOrigin) return;

  const sourceIframe = iframes.find(
    (iframe) => iframe.contentWindow === e.source,
  );

  console.log(sourceIframe);
});

Spécifications

Specification
HTML
# dom-iframe-contentwindow

Compatibilité des navigateurs