jQuery crée un IFRAME caché pour soumettre le formulaire en, parce que c'est la seule façon de gérer un transfert de fichiers d'une manière AJAXy.
La raison sous-jacente du problème est qu'Opera se déclenche lorsque un iframe vide est inséré dans le document. Le script jQuery n'attend pas cet événement onload initial, pense que l'envoi du formulaire est terminé et conclut qu'il n'a pas réussi. La raison pour laquelle cela n'arrive pas aussi facilement sur http est probablement liée au fait que le timing est différent quand Opera doit chiffrer une charge utile de téléchargement de fichier.
Si le même script qui insère l'IFRAME lance également le chargement du document dans l'IFRAME, les autres navigateurs attendent que le chargement du document se termine et ne déclenchent qu'un seul événement de chargement. (Ou quelque chose comme ça - dans ce cas précis, le script qui lance le chargement du document est en cours d'exécution à partir d'un timeout, donc ce n'est même pas le même script).
Mon suggéré solution serait d'améliorer la tentative de contournement qui existe déjà pour ce problème:
if (!isXml && (doc.body == null || doc.body.innerHTML == '' ))
et vérifier dans cette instruction if si l'URL du document à l'intérieur du IFRAME est toujours le javascript initial: false :
if (!isXml && (doc.body == null || doc.body.innerHTML == '' || doc.URL=='javascript:false'))
Ceci devrait être suffisant pour s'assurer que jQuery attend jusqu'à ce que le nouveau document soit chargé.
(BTW, génial si vous pouviez pousser cette suggestion en amont aux mainteneurs de ce script ..) – hallvors