2009-08-08 9 views
8

Y at-il un moyen de vérifier dans JavaScript si l'objet XMLHttpRequest prend en charge W3C Progress Events? Je veux dire ici si la définition des propriétés onload, onprogress, onabort, onerror, etc. à une fonction de gestionnaire aurait ces fonctions appelées ces événements, comme décrit.Comment faire pour vérifier en JavaScript si l'objet XMLHttpRequest prend en charge les événements de progression W3C?

Question supplémentaire (bonus): existe-t-il un moyen d'augmenter XMLHttpRequest (par exemple en utilisant des timers) pour prendre en charge ces événements?

Sidenote: J'ai d'abord trouvé sur les événements du W3C progrès dans le contexte de XMLHttpRequest here

Répondre

9

Avez-vous essayé de le faire de cette façon?

try { 
    var xhr = new XMLHttpRequest(); 

    if ('onprogress' in xhr) { 
     // Browser supports W3C Progress Events 
    } else { 
     // Browser does not support W3C Progress Events 
    } 
} catch (e) { 
    // Browser is IE6 or 7 
} 

J'ai testé cela dans Firefox & IE8. Firefox montre qu'il le supporte. IE dit qu'il n'a pas de support pour les événements W3C Progress.

+0

Une alternative à 'if (xhr.onload! == undefined) {...}' est d'utiliser 'if ('onload' dans xhr) {...}' –

+1

il est préférable de tester 'onprogress' dans xhr, parce que certains navigateurs (Opera) implémente onload/onerror, mais pas en cours, bien qu'Opera ne déclenche pas de progression, mais il peut être émulé avec: setInterval ({if (xhr.readyState === 3 && xhr.responseText! = = last) xhr.onprogress();}, 250); – 4esn0k

+0

@ 4esn0k J'ai mis à jour ma réponse. Je ne savais pas que Opera avait une implémentation différente. Merci. –