On peut recevoir les fichiers issus du bureau dans Firefox 3.x :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
  <head>
    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>
    <script type="text/javascript">

var dropArea;
// Objet appele par getElementById qui gere la reception des fichiers
var dropAreaObject = 'dropArea';

function initDrop()
{
  // Initialize the Listeners
  dropArea = document.getElementById (dropAreaObject);
  if (dropArea.addEventListener)
  {
    // Firefox Safari
    dropArea.addEventListener ("dragenter", dragenter, true);
    dropArea.addEventListener ("dragleave", dragleave, true);
    dropArea.addEventListener ("dragover", dragover, true);
    dropArea.addEventListener ("drop", drop, true);
  }
  else
  {
    // IE
    dropArea.attachEvent ("onodragenter", dragenter);
    dropArea.attachEvent ("ondragleave", dragleave);
    dropArea.attachEvent ("ondragover", dragover);
    dropArea.attachEvent ("ondrop", drop);
  }
}

function dragenter (e)
{
  // Quand on rentre sur la fenetre du navigateur avec un objet en DnD
  dropArea.setAttribute("dragenter", true);
  document.getElementById (dropAreaObject).innerHTML = "DragEnter";
}

function dragleave (e)
{
  // Quand on sort de la fenetre du navigateur avec un objet en DnD
  dropArea.removeAttribute("dragenter");
  document.getElementById (dropAreaObject).innerHTML = "DragLeave";
}


function dragover (e)
{
  // Quand on passe au dessus de la zone de depose
  // On bloque le over pour que drop puisse prendre la main lorsqu'on lache
  // le fichier
  e.preventDefault();
  document.getElementById (dropAreaObject).innerHTML = "DragOver";
}

function drop (e)
{
  // Lorsque qu'on lache l'objet.
  // On bloque l'action par defaut qui est de prendre l'objet dans le navigateur
  // si on veut traiter le fichier recu dans le javascript
  e.preventDefault();
  document.getElementById (dropAreaObject).innerHTML = "Drop";
  var dataTransfer = e.dataTransfer;
  var fichiers = dataTransfer.files;

  if (fichiers.length == 0)
  {
    // Pas de fichiers : bizarre
    return;
  }
  var texte = "UP: ";
  for (var i = 0 ; i < fichiers.length ; i++)
  {
    // Affiche les fichiers recus (on peut en recevoir plusieurs...)
    // Attributs disponibles : fileName, fileSize, mediaType, name, size
    // fileName = name, fileSize = size et mediaType est indefini
    // Methodes : getAsBinary (), getAsDataURL (), getAsText()
    var fichier = fichiers[i];
    texte = texte + " fileName="+fichier.fileName+"/fileSize="+fichier.fileSize+"/mediaType="+fichier.mediaType+"/name="+fichier.name+"/size="+fichier.size;
  }
  document.getElementById (dropAreaObject).innerHTML = texte
}
</script>
    <title>Test Drag and drop</title>
  </head>
  <body>
    <div id='dropArea' style='background-color:#cccccc; height:150px'>Upload</div>
    <script type='text/javascript'>initDrop();</script>
  </body>
</html>