Autor Zpráva
Darker
Profil
Chtěl bych stáhnout data vygenerovaná javascriptem aniž by uživatel musel mačkat CTRL+S - pouze by vybral cílovou složku, jako při běžném downloadu.
Našel jsem tohle, ale akorát to hází chyby:
docobj.execCommand('SaveAs',true,'subdoc');
_es
Profil
Darker:
Takáto funkčnosť bude asi v prehliadačoch pre JS zablokovaná.
Chamurappi
Profil
Reaguji na Darkera:
Nejspolehlivější a nejjednodušší je poslat data formulářem na server a ze serveru si je poslat zpátky s Content-Type: application/octet-stream — čili udělat z nich obyčejný download, u kterého bývá uživatel vyzván k rozhodnutí, co s ním chce dělat.

ale akorát to hází chyby
V Exploreru by nemělo.
Darker
Profil
Chamurappi:
Nejspolehlivější a nejjednodušší je poslat data formulářem na server a ze serveru si je poslat zpátky s Content-Type: application/octet-stream — čili udělat z nich obyčejný download, u kterého bývá uživatel vyzván k rozhodnutí, co s ním chce dělat.
To jsem chtěl, a když jsem začínal, dělal jsem to tak. Ale tehdy šlo o texťáky, teď by to byly obrázky. Příjde mi hrozně legrační je kvůli té hlavičce posílat tam a zase zpátky.

V Exploreru by nemělo.
Psali (už nevím kde, promiň) že ta funkce obecně funguje v opeře, FF, safari a IE. A definovaná je, jen hází ty chyby.
Witiko
Profil
Darker:
Bylo by možné vygenerovaná data převést na base64 a pak je předat přes data: pseudoprotokol s Chamurappim zmiňovaným mime typem. Problémem bude Internet Explorer a také nemožnost předání jména souboru / jeho koncovky - obecně HTTP hlaviček.
location.href = "data:application/octet-stream;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAAXNSR0IArs4c6QAAAANQTFRFAAAA p3o92gAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=";
Chamurappi
Profil
Reaguji na Witika:
Problémem bude Internet Explorer
Při tomto použití libovolná verze. Přestože už osmička umí pseudoprotokol data:, nedovoluje ho všude.

Nevím, jaké povahy jsou Darkerova data, ale starší Explorerové (před WinXP SP2) podporovali XBM obrázky a ty šlo díky jejich ASCII povaze sestavit i přes protokol javascript:. (Což teda vlastně vůbec nijak neřeší ukládání, jen mě to napadlo jako málo známá a posledních pár let už i málo použitelná alternativa k data:.)


Reaguji na Darkera:
Psali (už nevím kde, promiň) že ta funkce obecně funguje v opeře, FF, safari a IE.
Co jsem našel, tak se všude píše, že ji podporuje jen a pouze Explorer.
Darker
Profil
Chamurappi:
Co jsem našel, tak se všude píše, že ji podporuje jen a pouze Explorer.
Něco asi umí i ve firefoxu. Přinejmenším alert(document.execCommand) vrátí:
function execCommand() {
    [native code]
}

ne undefined.

Witiko:
Bylo by možné vygenerovaná data převést na base64
Naopak mi to přišlo jako jediné řešení, nicméně v případě obrázku se obsah zobrazí a nestáhne. A mě se nechce uvádět špatný mime typ aby se to stáhlo a pak je tu ten název souboru. Doufal jsem že to nějak vyřeší ta divná funkce, ale asi ne...

Nešel by třeba na server poslat jen název a ta data k odpovědi nějak nabalit javascriptem? Trochu šílené, ale naděje umírá poslední.
Witiko
Profil
Darker:
špatný mime typ
Není špatný, označuje binární soubor. Většina nejpoužívanějších formátů obrázku jsou binární soubory (vyjma například výše zmiňovaného XBM).

a ta data k odpovědi nějak nabalit javascriptem?
A jak se k té odpovědi asi dostane javascript? (Předpokládám, že uživatele na obsah přesměrováváš)

Jinak ano, možnost hrát si na HTTP server pomocí javascriptu na straně klienta by byla občas velmi užitečná, zatím je tomuto nejblíž právě data: protokol.
Chamurappi
Profil
Reaguji na Darkera:
Něco asi umí i ve firefoxu. Přinejmenším alert(document.execCommand) vrátí
Samozřejmě, document.execCommand funguje skoro všude, protože je to obecná funkce zastřešující všechny činnosti související s WYSIWYGem (s contenteditable). Ovšem činnost jménem SaveAs je podporovaná jen v Explorerech. Některé jiné činnosti fungují všude bezchybně, některé další zase třeba jen v Mozillách…

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0