V diskusi u Jakuba Vrány se objevila zmínka o zajímavém a potenciálně užitečném rozšíření pro Firefox, které by před uploadem fotky zmenšilo její velikost tak, aby se na serveru nemusely provádět náročné konverzní operace. Věc by to byla nepochybně užitečná, ale trochu problém je s implementací:
- Plugin do prohlížeče by znamenal implementovat stejnou věc hned několikrát (Firefox, IE, Opera, Safari,…)
- Desktopové aplikace by neměly problém po technické stránce, ale zase je potřeba opustit prohlížeč a rovněž implementace nemusí být nejjednodušší, pokud chceme podporovat více platforem (zde bude pravděpodobně čím dál atraktivnější běhové prostředí Adobe AIR)
- Poslední možností jsou „RIA aplikace“ běžící v prohlížeči, zde mezi nejznámější platformy patří Flash Player, Java a Silverlight. To by mi z mého pohledu připadalo jako rozumný kompromis mezi obtížností implementace, dostupností na různých platformách a uživatelským komfortem.
Poslední skupina má však historicky jeden problém – pluginové technologie typicky spouštějí aplikace v partial trust režimu, což z uživatelského pohledu znamená, že aplikace v zásadě nemají přístup k souborům ani k jiným zdrojům na uživatelově počítači. Zde se trochu vymyká Java, u které jsem na některých webech viděl, že si umí v případě potřeby říct o zvýšení práv a posune se tak do full-trust režimu. Konkrétní příklad lze vidět v bug-tracking systému JIRA, kde lze screenshot k bug reportu nahrát tak, že se obsah schránky Windows vloží přímo do Java appletu. Současný Flash Player ani Silverlight podobnou možnost nemají a vždycky jsem to považoval za jednu z jejich klíčových vlastností.
Ladislav Prskavec v jednom diskusním příspěvku upozornil, že Flash Player 10 bude mít metodu FileReference.save(), která bude umět data z Flash/Flex aplikace uložit přímo na uživatelův počítač – viz např. článek na flash.cz. V RSS čtečce jsem na ten článek už předtím narazil, ale nevěnoval jsem mu pozornost, protože mám tak hluboce zaryté, že Flash Player je partial-trust technologie, že jsem tomu kdesi v hloubi snad ani nechtěl věřit. Evidentně jsem se ale mýlil.
Z uživatelského pohledu je skvělé mít možnost dostat data do Flash Playeru bez round-tripu na server (diskutovaný scénář zmenšení fotek na klientovi před odesláním na server je perfektním příkladem), ale na první pohled mě trochu vyděsila bezpečnost – nestávám se na webu zranitelnější, když Flash Player umí uložit libovolná data na můj počítač?
Po troše průzkumu (zatím moc informací bohužel není) se však zdá, že k obavám není důvod:
- Uložení na disk vyžaduje explicitní akci uživatele (otevře se normální dialogové okno pro uložení souboru), přepsání lokálního souboru vyžaduje ještě o jedno kliknutí navíc („opravdu chcete přepsat…?“)
- Jelikož stejná úroveň „nebezpečí“ je na webu na každém kroku (každý link může směřovat na download potenciálně nebezpečného souboru), bude bezpečnost Flash Playeru 10 na zcela identické úrovni.
- V důsledku předchozího bodu zůstává Flash Player partial-trust technologií, takže žádné vkládání ze schránky nebo drag&drop z lokálních složek fungovat nebude (což je dobře!)
Celkově to tedy vypadá, že Adobe do FP přidala užitečnou věc, aniž by snížila bezpečnost uživatelů. Paráda.
Kontinuum pluginových RIA technologií tedy bude vypadat takto:
- Java applety jsou nejmocnější, v extrémním případě dokáží běžet ve full trust módu
- Flash Player 10 poběží vždy v partial trust módu, ale pro některé specifické případy bude moct načíst nebo uložit soubory k uživatelovi na harddisk
V Silverlightu o žádném přístupu k lokálním souborům nebo zdrojům nevím a ani jsem neslyšel, že by se to plánovaloUpdate: Jak upozornili Mifko a Petr Šnobelt, Silverlight 2.0 má třídu OpenFileDialog, která umožní do aplikace načíst libovolný soubor z uživatelova harddisku, a zmenšovač obrázků před uploadem již dokonce existuje (Fluxify). Ukládání na disk zatím chybí (Isolated Storage nepočítám, něco podobného je dostupné ve Flashi i v HTML už dlouho, ale z uživatelského pohledu to není ono). Díky za doplnění!
V Silverlightu 2.0 se skutečně na pevný disk sahat nedá. Osobně by mi to nepřišlo jako velké bezpečnostní ohrožení, i přes obyčejné HTML formuláře můžete stránce posílat soukromé soubory… Naštěstí se o tom uvažuje do verze 3.0.