upload flash 10 + Magento fix
Posté le Lundi 2 mars 2009 à 4 h 40, Read it in english with GoogleAllez un peu de code ça faisait longtemps. Voila que ces bouffons d’adobe sorte une nouvelle version de leur player vectorielle à 2 balles et ils sont même pas capable de respecter la compatibilité… Vous l’aurez compris je parle de la méthode d’upload de flash 10 qui n’est désormais plus lançable en javascript pour raisons de sécurité… Les méthodes FileReference.browse et FileReference.download nécessitent maintenant une action préalable de l’utilisateur pour s’activer. Comprenez par là que si vous appelez l’une de ces deux fonctions autre part qu’à la suite d’une action résultant d’un Event de type MouseEvent ou KeyboardEvent, les clients Flash 9 update 5 et Flash 10 supérieur vous renverront une exception !
Nous voilà donc avec 99% des scripts d’upload du net utilisant Flash qui throw des exceptions. L’astuce pour parer ça, c’est de faire le sale, de mettre un flash transparent par dessus votre bouton et d’appeler la méthode d’upload directement dans le flash. Y a de quoi ce pendre non ? Il aurait pu mettre une petite alerte de sécurité genre infobox en disant « attention un script tente de vous proposer d’uploader un fichier, acceptez, annuler », ils seraient passés pour des cons mais ils ont l’habitude maintenant; le truc c’est qu’ils sont feignants aussi. Ils préfèrent donc laissez la terre entière modifiez les scripts, et puis l’utilisateur final lui il a l’impression que c’est vous qui avez fait de la merde donc au fond ils s’en foutent.
Fix Magento upload image product
Tout ça pour dire que ça m’a fait super plaisir de bosser la-dessus ce week-end au lieu de profiter du soleil, notamment sur Magento qui est assez dur de mettre à jour à la 1.2.x (modification du template requise). Je me suis contenté pour l’instant d’appliquer un petit fix pour ne plus avoir d’erreur d’upload d’image des produits, ça évitera d’avoir le bug d’error javascript sur flex.js lorsque vous cliquerez sur browse files. Il est assez dur à trouver c’est pourquoi je vous file la soluce :
Il faut mettre à jour ces 5 fichiers de la version 1.1.x à la version 1.2.x (1.2.1.1 pour ma part) :
app/code/core/Mage/Adminhtml/Block/Media/Uploader.php
app/design/adminhtml/default/default/template/media/uploader.phtml
js/mage/adminhtml/flexuploader.js
js/mage/adminhtml/product.js
skin/adminhtml/default/default/media/uploader.swf
sinon pour gagner encore plus de temps, téléchargez ce fichier et décompressez le tout dans le répertoire de base de Magento : magento-flash10-fix
Qu’est-ce qu’on est niais aussi de baser nos scripts sur des techos foireuses…




Moi j’utilisais SWFUpload et j’ai aussi pris de plein fouet cette magouille d’adobe. J’avais construit tout un module avec des classes dans tous les sens. Ca me permettait d’avoir une galerie d’image (vignettes) avec upload et suppression de fichiers en quelques clics. Et hop, des journées de boulot réduites à néant : merci adobe de balayer d’un revers de manche ta communauté. Et le pire, c’est que j’ai aucune solution de replis. Si encore j’en avais une …
Après avoir copié des 5 fichiers sur un magento 1.1.2, j’obtiens un message d’erreur Javascript: Element.insert is not a function
[Break on this error] »
Auriez-vous une idée ?
Hello
alors j’ai pris connaissance de ce bug récemment, mais tous les posts que je trouve à ce sujet parlent de javascript et flash, avec cette historie de bouton transparent etc…dans la mesure ou le bouton d’ouverture de la fenetre de sélection de fichier se trouve dans un fichier flash, pourquoi ai-je le problème sur mon movie ? car d’aprés ce que j’ai compris, la solution proposée ne s’adapte qu’aux scripts ouvrant la fenêtre de sélection en javascript, est-ce correct ?
merci pour votre aide !
Non, il s’applique à tous.
La restriction de sécurité de flash 10 implique qu’on ne peut plus lancer la selection de fichier en javascript mais également qu’on ne peut plus lancer le téléchargement de fichier en javascript.
Il faut que les méthodes FileReference.browse et FileReference.download soit dans un contexte (ou un sous contexte) de la méthode Button.onclik ou d’un évènement sur cette méthode et qu’il doit être appelé par une action système. Comprenez par là qu’il doit y avoir la méthode Button.onclik ou son évènement dans le stack-trace qui serait généré lorsque le système appel FileReference.browse ou FileReference.download.
Tout d’abord merci pour cette astuce qui semble aider bon nombre d’entre nous.
Malheureusement, je rencontre le même problème que Vincent, à savoir une erreur js : Element.insert is not a function.
Je travail sur une version 1.1.3 de Magento, et l’upgrade est impossible du fait des modifications apportées au template. Auriez vous une idée qui me permette de résoudre mon problème.
D’avance merci ;o)