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();
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.
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
Mais le
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.