L'Iframe pouvant entrer en conflit avec les autres éléments de la page, je préconise cette solution
Vous pouvez tout simplement procéder comme cela :
1 - créer une requete ajax qui récupère le lien de téléchargement en texte
Voici le code pour créer une fonction ajax qui vous renvoi le contenu
[javascript]
function getXMLHttpRequest()
{
var xhr = null; // On déclare une variable xhr à null
if (window.XMLHttpRequest || window.ActiveXObject)// Teste prise en charge des XMLHttpRequest
{
if (window.ActiveXObject) /*Si Internet Explorer alors on utilise les ActiveX*/
{
try /*On teste IE7 ou supérieur*/
{
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)/*Si une erreur est levée, alors c'est IE 6 ou inférieur*/
{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else /*Navigateurs récents(Firefox, Opéra, Chrome, Safari, ...)*/
{
xhr = new XMLHttpRequest();
}
}
else
{
alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
return null;
}
return xhr; // On retourne l'objet xhr
}
/* -- Envoi de données vers un fichier avec Ajax -- */
function ajaxPost(url,idDiv,donnees)//url : emplacement du fichier cible | donnees : envoi sous forme var1=donnee1&var2=donnee2&var3=donnee3
{
var xhr = getXMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
{
//Retourner le contenu
return xhr.responseText;
}
}
xhr.open("POST", url, true);/*On ouvre une connexion en méthode POST vers url*/
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(donnees); /*permet l'encodage des POST*/
}
[/javascript]
2 - Ajouter toujours au même code une fonction
qui simule un click sur un élément (cet élément est notre lien)
[javascript]
function simuleClick(idBtn)
{
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window,0, 0, 0, 0, 0, false, false, false, false, 0, null);
document.getElementById(idBtn).dispatchEvent(evt);
}
[/javascript]
3 - Puis le code JS
créer un nouvel élément dans la page avec un id précis (cet élément est dans notre cas un lien)
et simule le click sur cet élément.
[javascript]
//Créer un lien dans la page -> envoi une requête qui délivre le contenu du lien crée -> simule un clique sur ce lien -> puis supprime ce lien.
function creerLienEtCliquer(idDiv,question)
{
//Créer le lien avant la fermeture de la balise body invisible (grâce à style="visibility:hidden;")
document.getElementByTag('body').innerHTML += '<a id ="monlien" href="" style="visibility:hidden;">lien_download</a>';
//Envoi une requête ajax et remplis l'attribut "href" du nouveau lien crée avec le contenu reçu (le lien de téléchargement)
document.getElementByTag('monlien').href = ajaxPost("fichier_cible.php", "monlien", "param1=blabla¶m2='+question+'");
//Simulation du click sur le lien
simuleClick(idBtn);
// à la fin on supprime le lien de la page ni vu, ni connu
function removeElement('monlien') ;
}
//Sert à supprimer un élément d'une page grâce à son id
function removeElement(id) {
var element = document.getElementById(id);
element.parentNode.removeChild(element);
}
[/javascript]
Cela prend deux secondes à installer et peut fonctionner sous tous type de navigateur.
Contact sur
http://www.siapep.fr