Envoyer un form dans une IFRAME
Publié : 19 sept. 2010, 11:08
Bonjour
Je cherche un moyen d'envoyer un POST dans une iFRAME incluse dans mon XUL
J'ai tenté plusieurs choses dans mon code, dont :
Mais le submit() retourne une erreur (que ce n'est pas une méthode connue, d'après mes souvenirs).
En enlevant le submit et en ajoutant ce code :
Le click() ne réagit pas.
Serait-ce un problème de cross-domain ?..
Autre piste que j'ai expérimenté. Ajouter ces lignes avant le "var aInput = " :
Mais idem : rien ne se passe.
En cherchant encore :
Mais on ne voit pas le résultat dans l'IFrame (j'ai l'impression que l'opération est exécutée).
Du coup, je ne sais pas trop quoi faire maintenant.
Si vous aviez une idée (ou plus !), je serais plus que satisfait.
Merci d'avance.
Je cherche un moyen d'envoyer un POST dans une iFRAME incluse dans mon XUL
Code : Tout sélectionner
<?xml version="1.0" encoding="UTF-8" ?>
<window xmlns:html="http://www.w3.org/1999/xhtml"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="Une fenêtre" orient="horizontal">
<html:link rel="icon" href="chrome://myXtension/skin/icon.png"/>
<script type="application/x-javascript"
src="chrome://myXtension/content/window.js" />
<vbox flex="1">
<vbox style="margin:5px">
...
</vbox>
<html:iframe src="http://www.unsite.com"
id="myFrame" name="myFrame" flex="1" />
</vbox>
</window>
J'ai tenté plusieurs choses dans mon code, dont :
Code : Tout sélectionner
/* aDoc est la référence à l'Iframe */
var aForm = document.createElement("FORM");
/*aDoc.body.innerHTML = "";*/
aForm.setAttribute("ACTION", "http://www.site.com/script.php");
aForm.setAttribute("METHOD", "POST");
var aInput = document.createElement("INPUT");
aInput.setAttribute("NAME", "myInput");
aInput.setAttribute("ID", "myInput");
aInput.setAttribute("TYPE", "HIDDEN");
aInput.setAttribute("VALUE", "valeur");
aForm.appendChild(aInput);
aDoc.body.appendChild(aForm);
aForm.submit();
En enlevant le submit et en ajoutant ce code :
Code : Tout sélectionner
var aSubmit = document.createElement("INPUT");
aSubmit.setAttribute("TYPE", "SUBMIT");
aSubmit.setAttribute("STYLE", "display: none;");
aSubmit.setAttribute("VALUE", "xxx");
aForm.appendChild(aSubmit);
aSubmit.click();
Serait-ce un problème de cross-domain ?..
Autre piste que j'ai expérimenté. Ajouter ces lignes avant le "var aInput = " :
Code : Tout sélectionner
/* aDoc est une référence à un html:div inséré dans le XUL cette fois */
aForm.setAttribute("TARGET", "myFrame");
while(aDoc.hasChildNodes())
{
aDoc.removeChild(aDoc.firstChild);
}
En cherchant encore :
Code : Tout sélectionner
/* uploadChannel est une référence au channel de l'iFrame */
/* postDataTxt est la chaine des données postées, du genre "myInput1=valeur1&myInput2=valeur2" */
var inputStream = Components.classes["@mozilla.org/io/string-input-stream;1"]
.createInstance(Components.interfaces.nsIStringInputStream);
inputStream.setData(postDataTxt, postDataTxt.length);
uploadChannel.setUploadStream(inputStream, "application/x-www-form-urlencoded", -1);
Du coup, je ne sais pas trop quoi faire maintenant.
Si vous aviez une idée (ou plus !), je serais plus que satisfait.
Merci d'avance.