5

Ho un modulo di caricamento del file di lavoro che utilizza XMLHttpRequest 2 per caricare i file su Transloadit (un servizio di elaborazione file). Gli eventi di avanzamento vengono attivati ​​correttamente in Firefox e Chrome, sia per Desktop che per Android. Ma il browser azionario Android (4.0) non attiva questi eventi, quindi la mia barra di avanzamento non funziona per quegli utenti del mio sito. XHR2 e ProgressEvent sono supportati in Android dal 3.0, quindi non so cosa sta succedendo.Nessun progresso XMLHttpRequest 2 nel browser di serie Android

Il codice è:

<!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> 
+0

Eventuali duplicati di [Getting XMLHttpRequest Progress da PHP Script] (http://stackoverflow.com/questions/3990933/getting-xmlhttprequest-progress-from -php-script) –

risposta

0

L'evento progress è supportato nella versione cromo del Browser Android:

Android 4.4 (API di livello 19) introduce una nuova versione di WebView che è basato su Chromium. Questa modifica consente di aggiornare le prestazioni di WebView e il supporto degli standard per HTML5, CSS3 e JavaScript per adattarsi agli ultimi browser Web. Qualsiasi app che utilizza WebView erediterà questi aggiornamenti quando è in esecuzione su Android 4.4 e versioni successive.

Aggiornamento a 4.4 per utilizzare questa API.

Riferimenti

+0

Il mio telefono è già su Android 6.0.1. Il problema non è con me, ma con gli utenti del mio sito. –