input file et javascript

Posté le lundi 5 f√©vrier 2007 à 20 h 27, Read it in english with Google

Voulant 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 :
    inputfile.onchange = function(){
      alert('value:'+this.value); //affiche 'value:' + le chemin de votre fichier
      var newfile = this.cloneNode(true);
      alert('new value:'+newfile.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.

Laissez un commentaire :