Maison > interface Web > js tutoriel > le corps du texte

Résoudre le problème de communication entre la page parent et la page iframe grâce aux compétences pseudo-protocol_javascript

WBOY
Libérer: 2016-05-16 16:05:46
original
1239 Les gens l'ont consulté

Nous avons souvent des opérations sur les pages parents et les pages iframe, comme

Le contenu de cette iframe est écrit en js. Comme le code suivant

var iframe = document.getElementById("iframe"),
  doc = iframe.contentWindow.document;
doc.open();
doc.write("---------something------");
doc.close();
Copier après la connexion

Le code ci-dessus est correct dans la plupart des cas. Mais il existe une situation où la page parent écrit explicitement document.domain = "xxx";

Dans la série IE (je ne l'ai pas essayé sur IE10), il y aura une erreur de non-autorisation. Il n'y a aucun problème dans Firefox et Chrome.

Pourquoi est-ce ? Il s'agit d'un bug dans IE, c'est-à-dire que lorsque la page parent ne définit pas explicitement document.domain, l'iframe sera par défaut le document.domain étant le même que la page parent, c'est-à-dire les deux. sont

location.host, les pages parent et enfant peuvent communiquer, c'est-à-dire l'exemple de l'en-tête de l'article, mais lorsque la page parent définit explicitement document.domain="", les pages de l'iframe doivent également définir explicitement document.domain = "xxx", sinon

Si vous n'avez pas l'autorisation d'obtenir iframe.contentWindow.document, vous ne pouvez pas écrire de contenu de manière dynamique. En fait, vous pouvez également faire pointer l'iframe vers une page spécifique. Cette page définit explicitement document.domain=". xxx", puis à travers l'article Le carré de départ

, mais le problème est que ma page parent contient de nombreux iframes de ce type, et le nombre est inconnu (tous sont des espaces publicitaires), elle ne peut donc pas transmettre une page spécifique.

Le problème se pose. Dans ce cas, nous semblons n'avoir aucune solution

1. La page parent est définie et doit définir explicitement document.domain

2. Le contenu de la page iframe doit être généré dynamiquement par js.

3. Aucune chance de définir src pour iframe.

Mais lorsque les trois conditions ci-dessus sont remplies, nous pouvons résoudre ce genre de problème grâce à un pseudo-protocole.

Copier le code Le code est le suivant :

iframe.src="javascript:void((function(){var d=document;d.open();d.domain='xxx;d.write('---something');d.close()} )())";

De cette façon, le document.domain de l'iframe peut être explicitement défini pour être cohérent avec la page parent.

Après avoir écrit ceci, la nécessité d'écrire dynamiquement du contenu iframe est effectivement réalisée, mais cette page apparaîtra séparément, comme window.open();
Pourquoi est-ce ? Il s'agit également d'un bug dans la série IE, c'est-à-dire que la page parent a , et le contenu écrit via le pseudo-protocole de l'iframe affichera un nouveau page comme window.open,
Mais le de la page parent doit être _self, vous ne pouvez donc définir la cible de base que sur _self avant d'appeler iframe.src. Une fois le contenu écrit, définissez la cible de base sur _blank

.

Cela résout le problème.

Bien que les pseudo-protocoles puissent résoudre ce problème, il existe certains risques. N'utilisez pas cette méthode avec désinvolture, sauf si cela est absolument nécessaire.

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal