Maison > interface Web > js tutoriel > Pourquoi mon code JavaScript obtient-il une erreur « SecurityError : Blocked a frame with origin... » lors de l'accès à un IFrame ?

Pourquoi mon code JavaScript obtient-il une erreur « SecurityError : Blocked a frame with origin... » lors de l'accès à un IFrame ?

Susan Sarandon
Libérer: 2024-12-28 14:03:10
original
170 Les gens l'ont consulté

Why Does My JavaScript Code Get a

Accès aux cadres d'origine croisée bloqué : compréhension de SecurityError

Dans le développement Web, lorsque vous tentez d'accéder à des éléments dans une iframe qui a un origine différente de celle du document parent, les développeurs peuvent rencontrer l'erreur suivante :

SecurityError: Blocked a frame with origin "http://www.example.com" from accessing a cross-origin frame.
Copier après la connexion

Cette erreur se produit en raison de la politique de même origine mise en œuvre par les navigateurs Web.

Politique de même origine

La politique de même origine empêche les scripts d'accéder aux ressources de sites Web avec des origines pour prévenir les failles de sécurité potentielles. L'origine fait référence à la combinaison du protocole, du nom d'hôte et du port d'une URL.

Considérez les exemples suivants :

  • http://www.example.com/home /index.html peut accéder aux ressources de http://www.example.com/home/other.html et http://www.example.com:80.
  • https://google.com/search?q=james bond ne peut pas accéder aux ressources de http://www.example.com/home/index.html.

Solution de contournement pour accéder aux cadres d'origine croisée

Bien que l'accès JavaScript direct aux frames d'origine croisée soit interdit, il existe des solutions de contournement pour échanger data:

  • window.postMessage() : Permet le passage de messages contrôlés entre deux fenêtres d'origines différentes.
  • postMessage() écouteur dans l'iframe : écoute les messages envoyés par le parent document.
// In the main page:
frame.contentWindow.postMessage('message', 'https://your-second-site.example');

// In the iframe:
window.addEventListener('message', (event) => {
  if (event.origin === 'https://your-first-site.example') {
    console.log(event.data); // Received message
  }
});
Copier après la connexion

Désactivation de la politique de même origine (Attention)

La désactivation de la politique de même origine peut être effectuée à des fins de développement, mais ne doit jamais être utilisé dans des environnements de production car il présente des risques de sécurité importants. Voici des liens vers des ressources permettant de désactiver la politique dans divers navigateurs :

  • [Google Chrome](https://stackoverflow.com/questions/26982875/how-to-disable-same-origin-policy )
  • [Mozilla Firefox](https://superuser.com/questions/287723/temporously-disable-same-origin-policy-in-firefox)
  • [Safari](https://apple.stackexchange.com/questions /211467/comment-désactiver-la-politique-de-même-origine-dans-safari)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal