Envoyer un form dans une IFRAME

Vous vous penchez sur le développement d'applications ou d'extensions pour Mozilla ? C'est alors vers ce forum que se dirigeront naturellement vos requêtes...
LeDU
Arias
Messages : 7
Inscription : 06 oct. 2009, 01:15

Envoyer un form dans une IFRAME

Message par LeDU »

Bonjour

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();
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 :

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();
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 = " :

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);
	}
Mais idem : rien ne se passe.

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);
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.
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 0 invité