Подтвердить что ты не робот

Как обнаружить браузер, который не поддерживает XHR2.

Немногие браузеры для Android, включая браузеры Samsung по умолчанию на старых устройствах, не будут поддерживать

xhr.upload.onprogress

Событие. Поэтому мы не можем показывать результаты загрузки в реальном времени в этих браузерах.

Как я могу обнаружить эти браузеры? Поэтому я могу изменить свою настройку, чтобы показать прогресс.

4b9b3361

Ответ 1

Просто:

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

гм. протестировал очень старый 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 запускается нормально.


Текущий вывод: данные были отправлены слишком быстро для старых браузеров.

Ответ 3

Ниже было протестировано в 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;
      }
  }