-->

Flash10, FileReference & Error #2176

|

Parmi les nouveautés de Flash10, les restrictions de sécurité du FileReference font parties des mauvaises nouvelles. Bien que sur le papier l’enjeu sécuritaire est important, le fait qu’il n’y ai pas de rétro compatibilité pose pas mal de problème et la blogosphère de développeurs Flash/Flex le montre bien :
Flex and Flash Developer – Jesse Warden dot Kizz-ohm
The Flash Blog

En effet, dans le Flash Player 10, l’appel à Filereference.browse ou FileReference.download n’est accepter que lorsque qu’il y a une action utilisateur (MouseEvent, KeyboardEvent…), si cela pose quelques problèmes pour les nouveaux projets à venir (utilisation d’un framework utilisant les notifications, donc appel indirect…), cela en pose encore plus pour les anciens projets, qui pourront ne plus fonctionner suivant la méthode de développement utilisés.

Je me suis confronté au problème sur un projet Flex / PureMVC, suite à un clic utilisateur, j’appelle à un webservice qui me renvoi l’adresse d’un fichier à télécharger, je lance alors un FileReference.download(), mais Flash10 ayant « perdu » l’action de l’utilisateur dans les notifcations de PureMVC, il fait une alerte :

Error: Error #2176: Certaines actions, par exemple celles qui ouvrent une fenêtre contextuelle, ne peuvent être invoquées que par une interaction de l’utilisateur, telle qu’un clic de souris ou un appui sur une touche.)

Pour l’utilisateur ayant Flash10, rien ne se passe, et malgré de nombreuses tentatives ( ce que ferait n’importe quel utilisateur dans ce cas) l’utilisateur ne pourra jamais effectuer l’action voulu. Donc tous vos développement antérieurs faisant appel à une méthode de FileReference indirectement ne fonctionera plus sur Flash10, il vous faudra reprendre vos anciens projets, se replonger dans le code, et résoudre ce problème !

La solution étant la suivante :

var _file:FileReference = new FileReference();
try {
   // Flash Player 9
   _file.download(new URLRequest(url));
} catch(erreur:Error) {
   // Flash Player 10
   popupFlash10(url);
}

On test si l’appel à la méthode download de FileReference fonctionne (Flash 9), si ce n’est pas le cas (Flash 10), on ouvre une popup proposant le lien à l’utilisateur, qui valide en cliquant sur un bouton.
Flash 10 détectant l’appel à la méthode download de FileReference par une action utilisateur, le téléchargement fonctionnera…

Upload et Download requert un action utilisateur ( Adobe Flash 10 security changes ) »

Laisser un commentaire

Champs Requis *.

*


Seo