J'ai une page HTML + javascript qui incorpore une page dans un iframe. Je voudrais être en mesure de déclencher un bouton de soumission (qui provoque un POST) dans la page incorporée en utilisant javascript dans la page d'accompagnement. Y a-t-il une bibliothèque qui le fait déjà?Déclenchement des boutons dans l'iframe contenu
Répondre
Si les hôtes IFRAME
une page dans le même domaine, on peut dire
// To trigger from the enclosing page
var yourFrame = document.getElementById("iframeId");
if(yourFrame.contentDocument) {
yourFrame.contentDocument.getElementById("formId").submit(); // FF, etc
} else {
yourFrame.contentWindow.document.getElementById("formId").submit(); // IE
}
// To trigger from the enclosed page
document.getElementById("formId").submit();
... où iframeId
est l'ID de l'iframe, et formId
est l'ID de la forme à l'intérieur du iframe, quelque chose comme
A l'intérieur du document:
<iframe id="iframeId" src="/somePage.html" ... >
A l'intérieur du document à "somePage.html
":
<form id="formId" method="post" action="...">
Notez que si le IFRAME
organise une page dans un autre domaine, alors si vous essayez de soumettre de la page englobante, vous obtiendrez probablement une sorte d'erreur « accès refusé ». Ceci est une précaution de sécurité prise par le navigateur pour empêcher les scripts malveillants (par exemple pour empêcher la soumission automatique d'un formulaire au nom d'un utilisateur)
Le iframe
doit être dans le même domaine, sinon vous êtes SOL.
Pour accéder aux éléments du cadre, vous devez vous comporter différemment selon les navigateurs.
D'abord, obtenir le cadre:
document.getElementById
fonctionne toujours.window.frames[ frameName ]
devrait être bien aussi, mais utiliser la première
ensuite obtenir le document (voici où il devient délicat):
var doc = yourFrame.contentDocument ? yourFrame.contentDocument : yourFrame.contentWindow.document
Normes navigateurs nécessitent l'utilisation de contentDocument
; IE (au moins avant 8) utilise contentWindow.document
pour obtenir le document.
Enfin, vous pouvez récupérer le formulaire et l'envoyer.
doc.getElementById('yourForm').submit()
+1 pour utiliser correctement le contenuDocument –
étant X-Browser est toujours utile – geowa4
yourFrame.contentWindow.document ne fonctionne que dans IE – geowa4
@George: Vous avez absolument raison; merci d'avoir attrapé ça! –