Force download IE7
2007-07-23T12:09:44+02:00
2007-07-23T17:52:00+02:00
2022-07-25T14:01:28+02:00
rekz
Sziasztok!
CSV-ben szeretnék outputot adni a felhasználónak, letölthető fájl formában. A CSV-t azonban a firefox alapból megjeleníteni akarja, ezért csináltam egy ilyen kis "force download" php-t:
(fdownload_ftmp.php)
<?php import_request_variables("gP", "par_"); if (isset($par_s)) { Header( "Content-Type: application/octet-stream" ); Header( "Content-Length:" . filesize( "tmp/".$par_s ) ); Header( "Content-Disposition: attatchment; filename=$par_s" ); readfile( "tmp/".$par_s ); } else echo("<html><body>No par 's'</body></html>"); ?>

És így hívom meg js-sel:

window.open("../../fdownload_ftmp.php?s=valami.csv","kimutat1",'toolbar=1,scrollbars=1,location=0,statusbar=0,menubar=1,resizable=1,width=760,height=460,left = 126,top = 212.5');

Tökéletesen működik IE6-ban és FF-ben is, de IE7-ben sajnos nem. Az IE7 megnyitja az ablakot, de aztán hirtelen el is tünteti, és nem kínálja fel a fájl letöltését. (Operában is kipróbáltam, ott félsiker: sajnos a CSV-t a böngészőben nyitja meg, de ezzel most nem akarok foglalkozni)

Van valakinek tippje, hogy az IE7 miért csinálja ezt, mivel lehetne letöltésre bírni?

Köszi!

(Ja, és egy adalék:
ha elrontom, és így csinálom:

import_request_variables("gP", "par_"); if (isset($par_s)) { Header( "Content-Type: application/octet-stream" ); Header( "Content-Length:" . filesize( "tmp/".$par_s ) ); Header( "Content-Disposition: attatchment; filename=$par_s" ); echo("<html><body>süsü</body></html>"); readfile( "tmp/".$par_s ); } else echo("<html><body>No par 's'</body></html>");

...akkor szépen megjelenik a "süsü" és alatta a csv fájl tartalma, de nem kínálja fel letöltésre, hanem megjeleníti)
Mutasd a teljes hozzászólást!
Ha a popup blocker megfogja az oldalt, akkor az opener() metódus által visszadott referencia szerintem nem mutat sehova sem (ha nem null lesz egyenesen), tehát ezt lehet próbálni tesztelni...
Mutasd a teljes hozzászólást!

  • A "hiba" az IE7 biztonsági beállításyaiban keresendő. Ilyen esetekben a lap tetején meg szokott jelenni egy figyelmeztetés, hogy a böngésző blokkolt egy felbukkanó ablakot/letöltést és ott lehet engedélyezni ideiglenesen a letiltott tartalmat. Programozás ügyileg a dologgal kapcsolatban sokat nem tehetsz, max kiírod az oldaladra, hogy IE7 esetén a felhasználó mire számítson.
    Mutasd a teljes hozzászólást!
  • Uff, ez tényleg így lehet; a popup blockert tudom tiltani (vagyis a popupot engedélyezni) IE7-ben bizonyos oldalakra, ezt meg is tettem, a jelenség ezzel együtt érvényes. De a letöltés-engedélyezést hol lehet beállítani (bizonyos oldalakhoz engedélyezni)? Nem találom
    (Nem jelenik meg "figyelmeztetés" vagy ha igen, olyan gyorsan becsukja, hogy nem látom)
    Esetleg arra van tipped, hogy ezt detektálni, hogy nem indult el a letöltés (kliens oldalon hogyan tudnám ezt vizsgálni?)
    Köszi...
    Mutasd a teljes hozzászólást!
  • A figyelmeztetés az oldal tetején, egy vékony sávban jelenik meg. Bár asszem az IE7-et úgyis be lehet állítani, hogy ne jelenítse meg a figyelmeztetéseket. Most utánanézni nem tudok, mert ezen a gépen nincs IE7, de otthon már találkoztam ezzel a jelenséggel.
    Mutasd a teljes hozzászólást!
  • Sajnos épp ez az, hogy nem jelenik meg a sárga sáv, vagy ha igen, akkor rögtön el is tűnik az ablakkal együtt. (vagyis azt sem tudom megállapítani, hogy tényleg ez-e a probléma). Egyébként meg nem találom ezt a beállítást, pedig már végignéztem egypárszor
    Lehetne még esetleg, hogy nem a fájlt nyitom meg a window.open-nel, hanem egy html-t, amiben egy link van, de az nem olyan szép. Lehet esetleg valahogy detektálni, hogy elindult-e a letöltés? Nincs ötletem
    Mutasd a teljes hozzászólást!
  • Ha a popup blocker megfogja az oldalt, akkor az opener() metódus által visszadott referencia szerintem nem mutat sehova sem (ha nem null lesz egyenesen), tehát ezt lehet próbálni tesztelni...
    Mutasd a teljes hozzászólást!
  • Igen, de nem a popup blocker okozza, mert létre tudom hozni az ablakot. Akkor tűnik el megjelenés után közvetlenül, ha letöltendő fájlt akarok nyitni vele (vagyis mindenféle hibajelzés nélkül ilyenkor egy villanásnyira jeleníti meg az ablakot, majd eltünteti)
    Ahogy néztem a guglin, erre az a megoldás, hogy nincs megoldás. Egyelőre azt csináltam, hogy ledetektálom: ha IE7, akkor a popup ablakba egy linkes html-t teszek, nem a letöltendő fájlt magát.

    (mondjuk igazad van abban, hogy úgy is lehetne detektálni, hogy egy settimeout után megnézem, hogy megvan-e még az ablak, végülis nem valószínű, hogy a FFox pl. 1 mp alatt letöltené a fájlt, viszont az IE7 kevesebb mint 1 mp alatt eltünteti az ablakot...)
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd