如何检测不支持XHR2上传进度的浏览器

时间:2015-06-14 22:43:42

标签: javascript xmlhttprequest

旧设备上包含三星默认浏览器的Android浏览器很少支持

xhr.upload.onprogress

事件。因此,我们无法在该浏览器上显示实时上传进度。

如何检测这些浏览器? 所以我可以更改我的设置以显示进度。

3 个答案:

答案 0 :(得分:2)

HM。测试了一个非常老的Firefox。 3.5.2。

具有(new XMLHttpRequest).upload属性的第一个版本。

当前版Chrome:

send(1); //progress 1 of 1
send(40000000_chars); // 1,2 or more progress events.

Firefox 3.5.2:

send(1); //no progress events.
send(40000000_chars); // some progress events.

因此,如果浏览器发送时间不大,则旧浏览器上没有pregress个事件。

load .loaded == .total事件正常被解雇。

<小时/> 目前的结论:旧浏览器的数据发送速度太快。

答案 1 :(得分:2)

简单地说:

var xhr = new XMLHttpRequest();
if ( xhr && ('upload' in xhr) && ('onprogress' in xhr.upload) ) // attach event...

所以如果你想要一个功能:

function supportAjaxUploadProgressEvents() {
  var xhr = new XMLHttpRequest();
  return !! (xhr && ('upload' in xhr) && ('onprogress' in xhr.upload));
}

答案 2 :(得分:0)

以下是在FF 3.5.2中测试的,以返回false,但是对于最新的Chrome / FF / IE11 true

设置后尝试读取onpgress时会抛出异常。

希望有所帮助,

  function isSupported() {
      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
      try {
          xhr.upload.onprogress = isSupported;
          var x = xhr.upload.onprogress;
          return true;
      } catch(e) {
          return false;
      }
  }