J'ai rencontré la tâche d'accéder à la fenêtre parent à partir d'iFrame, si la fenêtre dans iFrame a été chargée à partir d'un autre domaine. Si je comprends bien, tous les navigateurs modernes permettent désormais de le faire. Je suis donc ici pour trouver la meilleure solution.
Je vais accomplir cette prochaine façon:
J'ai une superposition avec un iFrame en son sein. Cela fonctionnera au lieu des fenêtres contextuelles pour empêcher les bloqueurs de fenêtres contextuelles de bloquer mon contenu. La tâche consiste à recharger la page principale lorsque le document dans l'iFrame termine certains travaux. Dans un document, qui sera chargé sur un iFrame, j'ajouterai
<div id="is_closed" class="false"></div>
Dans une fenêtre parent, j'ajouterai une fonction, qui sera appelée toutes les secondes et vérifiera si ce div a toujours le nom de classe "false". Lorsque cela sera changé en "vrai", j'appellerai quelques rappels.
Si vous avez une meilleure solution, partagez-la avec moi. Appréciera toute aide.
Edit: C'est impossible car il est non seulement impossible de manipuler la fenêtre parent à partir de la fenêtre enfant, mais vice versa également. Mon idée était de manipuler la fenêtre enfant à partir de la fenêtre parent. J'avais tort.
Si j'étais vous, je vérifierais window.postMessage. Il peut faire ce que vous voulez:
Pour référence, voir ce qui suit:
Si je comprends bien, tous les navigateurs modernes permettent désormais de le faire. Je suis donc ici pour trouver la meilleure solution.
Ceci est votre solution. Ce que vous demandez n'est pas possible.
Voir les questions connexes:
[~ # ~] modifier [~ # ~]
Comme mentionné dans les commentaires ci-dessous, @ la réponse de JeremysAwesome propose une méthode qui autoriserait les demandes interdomaines dans certaines circonstances. Voir la question SO ci-dessous pour plus d'informations.
mais vous pouvez modifier l'attribut src
de iframe
(en ajoutant un #hashtag
par exemple) et écoutez l'événement onhashchange
dans la fenêtre enfant. Étant donné que vous êtes en mesure de changer les deux pages.
une autre façon serait de définir les iframes src sur javascript:
lier 500 millisecondes après son chargement. Exemple:
setTimeout(function() {
document.getElementsByTagName("iframe")[0].src = `javascript:
(function(){
setInterval(function() {
if (document.getElementById("is_closed").className.match(/true/g)) {
...//see @jeremysawesome on how to do window.postMessage
}
})()`
}, 500);
Bien que la réponse de @jeremysawesome ait fonctionné, cela fonctionnera sur une iframe intégrée, quel que soit le domaine hôte, c'est très bien lorsque vous travaillez avec des sites Web hébergés sur des domaines tels que blogspot.com
qui ne vous permettent pas de modifier facilement ce type de contenu ...
Maintenant, vous devrez évidemment lancer window.postMessage
, plus d'informations à ce sujet peuvent être trouvées sur @ la réponse de jeremysawesome