FF 46.0.1+ / JS / window.close() fájl letöltés után / hogyan?

Fórumok

Sziasztok,

Firefox 46.0.1 óta nem engedett a window.close() JavaScript metódus biztonsági okok miatt. Lásd az alábbit:

https://developer.mozilla.org/en-US/docs/Web/API/Window/close

Closing the current window

In the past, when you called the window object's close() method directly, rather than calling close() on a window instance, the browser closed the frontmost window, whether your script created that window or not. This is no longer the case; for security reasons, scripts are no longer allowed to close windows they didn't open. (Firefox 46.0.1: scripts can not close windows, they had not opened)

Weboldalon egy linkre klikkelve fájl letöltést indítok egy új tab-on úgy, hogy a tartalmat kiküldöm megfelelő HTTP formátumban (content type, disposition, length).

A gondom az, hogy nem záródik be egy bizonyos FF verzió óta magától a letöltéshez létrejött ablak (tab).

FF 47-től felfelé tesztelve kikapcsolt multiprocess-nél (e10) eltűnik magától a letöltéshez felugró "üres" ablak, míg engedélyezett MP-nél ott marad. Ez egy sima üres tab. Az a gyanúm, hogy a fentihez köthető, vagy pedig a multiprocess megjelenéséhez a FF-ban, vagy mindkettőhöz.

Ti nem találkoztatok ezzel? Más böngészőn nincs ezzel gondom (IE11, Chrome stb).

Hozzászólások

Középső gombbal fájlra kattintásra gondolsz?

Majd kijavítják, amikor kikerülnek az aktuális kódbázisból a régi Mozilla/Netscape kódok. :)

:)

Miért kell egy letöltéshez külön tabot nyitni?

Szerintem nem jó ez a megközelítés. Ezzel elveszed a user-tól a döntést. Miért jó kikényszeríteni hogy a szervered mindenképp letöltésre ajánlja a PDF fájlt, mikor a beállításoknál amúgy is megadhatja a user, hogy megnyissa külső programmal, vagy a beépítettel, vagy letöltse?

Azert, mert sok bongeszo mindenkeppen inkabb megnyitja a fajlt, de cserebe nem ad lehetoseget menteni. Amugy meg valoszinuleg user igeny a dolog.

De amugy van egy csomo use case, ahol invalid lehetoseg az, hogy a PDF csak megnyiljon, mindenkepp letoltesre van szukseg. Ilyen peldaul a kitoltendo/alairando/scannelendo szerzodes, a kigeneralt szamla alairt PDF verzioja, stb.
--
Blog | @hron84
Üzemeltető macik

Akkor simán használd a download attribútumot, akkor van az hogy a böngésző eldönti.

A lényeg hogy 2017 van, az általad jelzett bug viszont azért van a rendszerben, mert a te megoldásod a 90-es években volt divat.

Tulképp megkérdezted hogy az idei opelt miért nem lehet úgy beindítani hogy a benzintartályba rongyot tömünk és meggyújtjuk mint régen.

Elvittétek a szálat egy más irányba. Ami a lényeg, hogy nem én nyitom a tab-ot. Nem tőlünk függ. Ez a Firefox böngésző alapértelmezett viselkedése.

Kicsit bővebben: Nem csinálok javascript-et, nincs semmi kliens oldali móka, hanem szabványos HTTP adatot küldök fájllal úgy ahogy feljebb írtam. Erre FF új tab-ot nyit, mely e10-et engedélyezve ott marad, az nélkül illetve régi viselkedés alapján pedig nem.

Á értem.

Az alapbeállítás ha jól látom az, hogy a róka a PDF-eket a saját nézegetőjében nyitja meg. Az általad vázolt esetben is ennek kellene történnie. Csináltam pár tesztet. Szimpla html fájl, benne egy link ami egy teszt pdf-re mutat. A linkre kattintva megnyílik a róka PDF nézegetője új lapon.

Az, amit te írsz akkor jön elő, ha beállítom, hogy a pdf-ek megnyitását ne a saját nézegetőjével kezelje. Tényleg fura, hogy ez esetben nyitva marad a lapfül, viszont ahogy látom ennek nincs köze a pdf-hez, más fájlokkal ugyanígy csinál.

Ha nem állítottad el ezt a beállítást, akkor amire még tudok gondolni, hogy generált a pdf, és olyan headereket kap, ami miatt kihagyja a saját nézegetőben megnyitást.

Mert van, amikor a usernek nincs szuksege a dontes lehetosegere, mert a valaszthato opciok kozul mindossze egyetlen egynek van ertelme. Ez olyan, mintha elmennel egy barba es azt mondanak, hogy egy ures meg egy teli korso kozul valaszthatsz. Nyilvan nem valasztanad az ures korsot, mert annak nincs ertelme, cserebe felesleges es ertelmetlen idohuzas az egesz.

Bizonyos interakcioknal ugyanez van. A user 99.9%-ban csak letolteni akar, akkor minek feldobatni meg egy kerdest, vagy megbonyolitani az eletet azzal, hogy a bongeszo szegenyes eszkozkeszletevel kinlodjon feleslegesen, mikor egybol fel is lehet ajanlani letoltesre a cuccot.
--
Blog | @hron84
Üzemeltető macik

Attol fugg, mi a use-case, kik a userek, es mit csinalnak epp az oldalon. Ez nagyon-nagyon erosen alkalmazasfuggo. Nem tudjuk a kontextust, ne iteljunk elsore.

Csak hogy peldat mondjak: ott van a CinemaCity online jegyveteli rendszere, lenyegeben egy baszott nagy QR kod. Senki nem akarja a jegyet elolvasni (legalabbis vasarlas utan rogton nem), kitorolni meg aztan foleg nem, en ott siman force letoltetnem. A userek 99%-a egybol masolja telefonra es megy vele a moziba.
--
Blog | @hron84
Üzemeltető macik

Önmagadnak ellentmondasz. Ezt írtad most:

"Attol fugg, mi a use-case, kik a userek, es mit csinalnak epp az oldalon."

Vagyis hogy had döntse el, mert attól függ ki mit csinál. Én pont ezt írtam első körben, csak te megpróbáltad megmagyarázni ezzel:

"Mert van, amikor a usernek nincs szuksege a dontes lehetosegere.."

Vagyis hogy had ne ő döntse el. Nem igazán látom értelmét annak amit írsz a saját kontextusodban. Szerintem hagyjuk. Eszes rossz felé vitte el a szálat, mert nem nyit senki sem tabot, lásd a feljebbi másik válaszom.

Nem, a "had ne o dontse el" az ennel restriktivebb, azzal azt mondod, hogy sosem kell dontesi lehetoseget adni. En azt mondom, hogy van olyan helyzet, amikor kell, van olyan helyzet, amikor nem, use-case fuggo. Irtam is ra peldat, hogy mikor nincs szukseg arra, hogy a user donthessen.

Illetoleg, a dontes lehetoseget nem csak a bongeszo funkcioira tamaszkodva lehet megvalositani. Ha egy PDF dokumentum link mellett ott van ket ikon, az egyik normal modon megnyitja, a masik pedig eroszakosan letoltesre ajanlja fel, akkor a valasztas lehetosege ugyanugy megvan, megis az altalad oly serelmesnek itelt modszer is hasznalva van.

Megegyszer modnom, nem tudjuk mi a use-case, de te mar eliteltel valakit azert, mert diktatorikusan banik a usereivel.
--
Blog | @hron84
Üzemeltető macik

Fogalmam sincs, hogy a fogyatekkal elok hogy jonnek ide, de ha mar iderangattuk szerencsetleneket: a konkret temaban bizonyos esetekben pont, hogy jo lenne, ha egy bena/alulfunkcionalo kezu embernek nem kellene annyit kattintania, hogy lementhesse a PDF-et. Akar egy kulon gombot neki, ami egybol letoltesre ajanlja fel a fajlt.

De ettol fuggetlenul erdekelne a gondolatmenet, ahogy eljutottal idaig.
--
Blog | @hron84
Üzemeltető macik

Én csak tippeltem az okra, ezek szerint tévedtem.
A tapasztalt hibajelenség az, hogyha a fent nevezett oldalon megnéz a felhasználó egy számlakivonatot a Chrome beépített pdf nézőjével, rákattint a mentés-re akkor a filerendszeren egy nulla byte hosszú file keletkezik.