8

Is there any way to check within JavaScript if XMLHttpRequest object supports W3C Progress Events? I mean here if setting onload, onprogress, onabort, onerror, etc. properties to some handler function would have those function called those events, as described.

Additional (bonus) question: is there a way to augment XMLHttpRequest (e.g. using some timers) to support those events?

Sidenote: I have first found about W3C Progress Events in the context of XMLHttpRequest here

Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
Jakub Narębski
  • 309,089
  • 65
  • 217
  • 230

1 Answers1

10

Have you tried doing it this way?

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
}

I tested this in Firefox & IE8. Firefox shows it supports it. IE says it has no support for W3C Progress events.

Dan Herbert
  • 99,428
  • 48
  • 189
  • 219
  • Alternative to `if (xhr.onload !== undefined) { ... }` is to use `if ('onload' in xhr) { ... }` – Jakub Narębski Aug 09 '09 at 12:35
  • 1
    it's better to test for 'onprogress' in xhr, because some browsers (Opera) implements onload/onerror, but not onprogress, although Opera doens't fires onprogress, but it can be emulated with: setInterval( { if (xhr.readyState === 3 && xhr.responseText !== last) xhr.onprogress(); }, 250); – 4esn0k Dec 01 '11 at 11:18
  • @4esn0k I've updated my answer. I wasn't aware that Opera had a different implementation. Thanks. – Dan Herbert Dec 01 '11 at 14:24