J'explique mon problème:
J'ai une page web avec un bouton qui déclenche, via un appel en ajax la création d'un pdf sur le serveur. Ce que je voudrais, c'est qu'à la suite du click sur le bouton, la boite de dialogue qui propose d'ouvrir ou de sauver le fichier que je viens de générer s'affiche.
Pour le moment, j'ai réussi à faire marcher le truc sous Firefox en utilisant une iframe invisible dont la source pointe sur un proxy qui me retourne le fichier avec le header qui va bien.
et sur le serveur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 ... var handle = function (strFileName){ // recupere le nom du rapport généré var url = "./ReportDesigner?id=" + strFileName; if (window.ActiveXObject){ var a = document.createElement("a"); document.body.appendChild(a); a.href = url; a.target = "_blank"; a.onclick = function(){ alert(this.href); return true; } a.click(); } else{ // supprime l'ancienne iframe si elle existait var oldIFrame = $("displayReportIFrame"); if (oldIFrame) oldIFrame.parentNode.removeChild(oldIFrame); // crée la nouvelle iframe var iframe = document.createElement("iframe"); iframe.id = "displayRaportIFRame"; iframe.src = url; iframe.style.width = "0px"; iframe.style.height = "0px"; //iframe.style.display = "none"; $("reportDesignerMainLayout").appendChild(iframe); } } new Ajax.Request("ReportDesigner",{ method : "post", postBody : "design=" + root.xml + "&fileName=" + fileName + "&userId=1", onSuccess : function(xhr){ handle(xhr.responseText); //responseText contient le nom du fichier généré } }); }
Le problème, c'est que comme d'habitude cette daube d'ie ne gere pas/gere mal le header Content-Disposition.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // met les headers qui vont bien response.setContentType("application/pdf"); //response.setHeader("Cache-Control","no-store, must-revalidate, post-check=0, pre-check=0"); //response.setHeader("Pragma","no-cache"); //response.setDateHeader("Expires",System.currentTimeMillis() + 10*60*1000); //response.setIntHeader("Expires", 0); response.setHeader("Content-Disposition","attachement; filename=rapport.pdf");
J'ai tenté une autre méthode sous ie, parce que hier il me semble que j'arrivais a ouvrir la boite de dialogue de cette façon mais depuis, avec tout ce que j'ai testé, j'arrive plus a me souvenir comment je faisais ^^
Donc ma question, c'est n'y aurait-il pas un moyen plus simple d'arriver au même résultat. Clairement mon problème la, c'est les headers que ie ne gere pas, mais si quelqu'un autre solution que celle de l'iframe, je suis preneur.
ps: et même s'il me trouve la bonne combinaison de headers, je suis preneur ^^
Partager