Нет прогресса XMLHttpRequest 2 в стандартном браузере Android

У меня есть рабочая форма загрузки файлов, которая использует XMLHttpRequest 2 для загрузки файлов в Transloadit (служба обработки файлов). События прогресса правильно запускаются в Firefox и Chrome, как для ПК, так и для Android. Но стандартный браузер Android (4.0) не запускает эти события, поэтому мой индикатор выполнения не работает для этих пользователей моего сайта. XHR2 и ProgressEvent предположительно поддерживаются в Android с версии 3.0, поэтому я не знаю, что происходит.

Код:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Upload test</title>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
  <link href="/assets/application.css" media="all" rel="stylesheet" type="text/css" /> <!-- twitter bootstrap -->
  <script type="text/javascript">

    var onprogress = function(e)
    {
      var $status = $('.status');
      $status.text('onprogress: ' + (e.loaded / e.total) * 75 + '<br>');

      if (e.lengthComputable) {
        setProgress((e.loaded / e.total) * 75);
      }
    }

    var setProgress = function(percent) {
      percent = percent+'%';
      var $progressBar = $('.progress .bar');
      var $status = $('.status');
      $progressBar.css('width', percent);
      $progressBar.text(percent);
      $status.text(percent);
    };

    var createAttachment = function(file) {
      var params = {"blocking": true,"auth":{"key":"XXX"},"template_id":"XXX"}
      var xhr = new XMLHttpRequest();
      var data = new FormData();

      data.append('params', JSON.stringify(params));
      data.append('attachment[file]', file);

      var evtReceiver = xhr.upload || xhr;
      evtReceiver.addEventListener('progress', onprogress, false);
      xhr.onload = function(e) {
        var resp = JSON.parse(e.target.response)
        $('.image').append($('<img src="' + resp.results['android-thumb'][0].url + '">'))
        setProgress(100);
      };

      xhr.open('POST', 'http://api2.transloadit.com/assemblies', true);
      xhr.send(data);

    };


    $(document).ready(function() {
      $('input[type=file]').on('change', function(event) {
        createAttachment(event.target.files[0]);
      });
    });
  </script>

</head>

<body>

<input type="file" name="my_file">

<div class="progress progress-striped active">
  <div class="bar" style="width: 0;"></div>
</div>

<div class="status"></div>

<div class="image"></div>

</body>
</html>

person Hernan S.    schedule 21.11.2012    source источник
comment
Возможный дубликат Получение XMLHttpRequest Progress из PHP-скрипта   -  person Paul Sweatte    schedule 02.12.2016


Ответы (1)


Событие прогресса поддерживается в версии браузера Android для Chromium:

Android 4.4 (уровень API 19) представляет новую версию WebView, основанную на Chromium. Это изменение повышает производительность WebView и поддерживает стандарты HTML5, CSS3 и JavaScript, чтобы они соответствовали новейшим веб-браузерам. Любые приложения, использующие WebView, наследуют эти обновления при работе на Android 4.4 и выше.

Обновите до 4.4, чтобы использовать этот API.

Ссылки

person Paul Sweatte    schedule 01.12.2016
comment
Мой телефон уже на Android 6.0.1. Проблема не во мне, а в пользователях моего сайта. - person Hernan S.; 02.12.2016