2015-06-14 14 views
11

Few android przeglądarek w tym Samsung domyślnych przeglądarek na starszych urządzeń nie obsługującychJak wykryć przeglądarki, która nie obsługuje XHR2 przesłać postęp

xhr.upload.onprogress 

zdarzenie. Nie możemy więc wyświetlać postępu przesyłania w czasie rzeczywistym w tych przeglądarkach.

Jak mogę wykryć te przeglądarki? Mogę zmienić ustawienia, aby pokazać postęp.

+1

mogliście przeczytać nagłówki przeglądarek. Chociaż osobiście uważam, że lepiej byłoby po prostu zrobić 'if (typeof xhr.upload.onprogress === 'undefined')' (lub podobny). W ten sposób unikasz sprawdzania przed każdą przeglądarką. –

+0

@EricMartinez uzyskiwanie "Object" na obu przeglądarkach level1 i level2. – Vishnu

+0

Przepraszam, otrzymuję "null" na obu przeglądarkach level1 i level2. – Vishnu

Odpowiedz

2

prostu:

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

Więc jeśli chcesz funkcję:

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

Proszę przetestować swój kod i opublikować pełny kod, jeśli to możliwe. – Vishnu

+0

Mój kod działa idealnie;)) – fred727

+0

Twój kod działa idealnie! funkcja funkcjiAjaxUploadProgressEvents() { var xhr = new XMLHttpRequest(); return !! (xhr && ('upload' w xhr) && ('onprogress' w xhr.upload)); } jeśli (! SupportAjaxUploadProgressEvents()) { alert ("Nigdy nie wspieram xhr2"); } else { alert ("Popieram xhr2"); } – Vishnu

2

hm. przetestowałem bardzo starą wersję Firefoksa. 3.5.2.

Pierwsza wersja, która ma właściwość (new XMLHttpRequest).upload.

Aktualna wersja 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. 

Więc jeśli przeglądarka wysłać ing czas nie jest duży, nie ma pregress wydarzenia na starych przeglądarkach.

Ale zdarzenie load z .loaded == .total jest wyrzucane normalnie.


Obecny wniosek: dane zostały wysłane zbyt szybko dla starych przeglądarek.

+0

Tak, w przypadku bardzo małych plików nie będzie żadnego zdarzenia postępu. ale w przypadku dużego pliku, np .: plik 20 Mb na łączu 512K zajmie kilka minut, aby zakończyć proces przesyłania, nadal w przeglądarkach na poziomie 1 wystąpią zdarzenia postępu zerowego. – Vishnu

+0

@ Visnu można uruchomić na poziomie 1 (skrypt jednolinijkowy): 'alert (" upload: "+ (" upload "w XMLHttpRequest.prototype) +" XHRET: "+ (XMLHttpRequestEventTarget? True: false) +" PE: "+ (ProgressEvent? True: false))' – befzz

+0

Dostałem True na poziomie 2, ale funkcja Level Alert nie została uruchomiona lub nie wygenerowała błędu, nie wiem, co się dzieje. jak możemy debugować te przeglądarki? – Vishnu

0

Poniższa był testowany w FF 3.5.2 wrócić false, ale najnowszy Chrome/FF/IE11 true

Wyjątkiem jest wyrzucane na próby odczytu onpgress po ustawiona.

nadzieję, że pomoże,

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; 
     } 
    } 
Powiązane problemy