input file et javascript
lundi 5 février 2007Voulant développer un file uploader simple et compatible, je me suis penché sur les spécifications du input type file et de ses différences suivant les navigateurs.
On remarque tout d’habord qu’aucun d’eux ne respecte le W3C et sur plusieur point :
- Ce dernier dit que l’on peut prédéfinir le fichier à uploadé en attribuant un chemin dans la propriété « value ». Ni Opera, ni FireFox, ni meme IE ne le fait. Cela est compréhensible, c’est une question de sécurité.
- En ce qui concerne FireFox et Opera, la méthode click() d’un input file n’a aucun éffet… vous ne pourrez donc pas lancez la fenetre de selection de fichier à l’aide d’un lien simple. Il faut impérativement que l’utilisateur click sur le bouton « Parcourir… » du input file pour pouvoir selectionner un fichier. Ce qui limite énormément les possibilités !!! D’autant plus que cela ne me semble pas justifié : il faudrait une sacré chance pour que l’utilisateur click par le plus grand des hazard inintentionnellement sur un fichier puis sur « ouvrir » (qui aura pour éffet de selectionner le fichier dans le input file). A noté que Internet Explorer accepte et éxécute cette fonction correctement.
- Et pour Internet Explorer maintenant, la méthode cloneNode() ne copie pas réellement l’élément input et sont contenu car il vide l’attribut « value » de celui-ci si il existe. Exemple :
span class="st0">'value:'//affiche 'value:' + le chemin de votre fichier
'new value:'//affiche 'new value:' uniquement car newfile.value == ''
}
la encore, je trouve ça totalement injustifié ! A noté qu’Opera et FireFox copie correctement le noeud avec la valeur.
Du coup, aucune méthode correcte, simple et portable sans iframe visible ne permet d’uploader des fichiers parce que personne n’arrive encore à s’entendre sur une spécification globale. Si vous utilisez GMail, vous pourrez remarquer que celui-ci a une méthode différente en fonction des navigateurs pour l’upload de pièce jointe sans ce servir d’iframes visibles. Il faut dire qu’avec les recommandations du W3C la dessus, on pourrait pépom votre disque dur tout simplement. Donc c’est simple, ici tout le monde a fait et fait encore de la ……
J’ai dernièrement recensé les principal méthodes permettant de faire un input file en javascript / AJAX ici.