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.