2009-05-19 5 views
0

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

7

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)

+0

yourFrame.contentWindow.document ne fonctionne que dans IE – geowa4

+0

@George: Vous avez absolument raison; merci d'avoir attrapé ça! –

1

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() 
+0

+1 pour utiliser correctement le contenuDocument –

+0

étant X-Browser est toujours utile – geowa4

Questions connexes