2015-06-14 5 views
11

Wenige android Browsern wie Samsung Standard-Browser auf älteren Geräten nicht unterstütztWie man einen Browser erkennen, die nicht XHR2 Upload-Fortschritt

xhr.upload.onprogress 

Veranstaltung unterstützen. Daher können wir in diesen Browsern keinen Echtzeit-Upload-Fortschritt anzeigen.

Wie kann ich diese Browser erkennen? So kann ich meine Einstellung ändern, um den Fortschritt anzuzeigen.

+1

Sie könnten die Browser-Header lesen. Obwohl ich persönlich denke, es wäre besser, wenn ich 'if (typeof xhr.upload.onprogress === 'undefined')' (oder ähnlich) mache. Auf diese Weise vermeiden Sie die Überprüfung für jeden Browser. –

+0

@EricMartinez erhält "Object" auf beiden Browsern level1 und level2. – Vishnu

+0

Sorry, bekomme "null" auf beiden level1 und level2 Browsern. – Vishnu

Antwort

2

einfach:

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

Wenn Sie also eine Funktion wollen:

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

Bitte testen Sie Ihren Code und posten Sie, wenn möglich, den vollständigen Code. – Vishnu

+0

Mein Code funktioniert einwandfrei;)) – fred727

+0

Dein Code funktioniert einwandfrei! Funktion supportAjaxUploadProgressEvents() { var xhr = new XMLHttpRequest(); zurück !! (xhr && ('upload' in xhr) && ('onprogress' in xhr.upload)); } if (! SupportAjaxUploadProgressEvents()) { alert ("Ich unterstütze nie xhr2"); } else { \t alert ("Ich unterstütze xhr2"); } – Vishnu

2

hm. testete einen sehr alten Firefox. 3.5.2.

erste Version, die (new XMLHttpRequest).upload Eigenschaft haben.

Aktuelle Version 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. 

Also, wenn Browser senden ing Zeit nicht groß ist, gibt es keine pregress Ereignisse auf alten Browsern.

Aber load Ereignis mit .loaded == .total wird normal ausgelöst.


Aktuelle Schlussfolgerung: Daten wurden zu schnell für alte Browser gesendet.

+0

Ja für sehr kleine Dateien wird kein Fortschrittsereignis ausgeführt werden. aber für eine große Datei zB: 20Mb Datei auf 512K Verbindung wird einige Minuten dauern, um den Upload-Prozess abzuschließen, immer noch auf Level 1 Browser wird es Zero Progress Events geben. – Vishnu

+0

@Vishnu kann in Level 1 (einzeiliges Skript) ausgeführt werden: 'alert (" upload: "+ ('Upload' in XMLHttpRequest.prototype) +" XHRET: "+ (XMLHttpRequestEventTarget? True: false) +" PE: "+ (ProgressEvent? True: false))' – befzz

+0

In Stufe 2 ist True, aber die Level Alert-Funktion wird nicht ausgeführt oder gibt einen Fehler aus, weiß nicht, was passiert. Wie können wir diese Browser debuggen? – Vishnu

0

unten Der wurde in FF 3.5.2 getestet false zurück, aber für die neueste ist zu versuchen, die onpgress, nachdem sie gesetzt Chrome/FF/IE11 true

Die Ausnahme geworfen zu lesen.

Hoffnung, die hilft,

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; 
     } 
    } 
Verwandte Themen