很少的Android瀏覽器,包括舊設備上的默認三星瀏覽器將不支持如何檢測,不會支持XHR2上傳進度
xhr.upload.onprogress
事件的瀏覽器。所以我們無法在該瀏覽器上顯示實時上傳進度。
如何檢測這些瀏覽器? 所以我可以更改我的設置以顯示進度。
很少的Android瀏覽器,包括舊設備上的默認三星瀏覽器將不支持如何檢測,不會支持XHR2上傳進度
xhr.upload.onprogress
事件的瀏覽器。所以我們無法在該瀏覽器上顯示實時上傳進度。
如何檢測這些瀏覽器? 所以我可以更改我的設置以顯示進度。
簡單:
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));
}
hm。測試了一個非常古老的Firefox。 3.5.2。第一版有(new XMLHttpRequest).upload
屬性。
當前版本的Chrome瀏覽:
send(1); //progress 1 of 1 send(40000000_chars); // 1,2 or more progress events.
火狐3.5.2:
send(1); //no progress events. send(40000000_chars); // some progress events.
所以,如果瀏覽器發送荷蘭國際集團的時間並不大,對舊的瀏覽器沒有pregress
事件。
但load
事件與.loaded == .total
正常發射。
對於非常小的文件,將不會執行進度事件。但對於一個大文件例如:在512K連接上的20Mb文件需要幾分鐘時間才能完成上傳過程,仍然在1級瀏覽器中會出現零進度事件。 – Vishnu
@Vishnu可以運行在1級(單行腳本):'alert(「upload:」+('upload'in XMLHttpRequest.prototype)+「XHRET:」+(XMLHttpRequestEventTarget?true:false)+「PE: 「+(ProgressEvent?true:false))' – befzz
在2級上得到True,但Level Alert函數未執行或拋出一些錯誤,不知道發生了什麼。我們如何調試這些瀏覽器? – Vishnu
下在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;
}
}
,你可以讀取瀏覽器的標題。雖然我個人認爲只是做'if(typeof xhr.upload.onprogress ==='undefined')'(或類似的)會更好。這樣你可以避免檢查每個瀏覽器。 –
@EricMartinez在level1和level2瀏覽器上都獲得「Object」。 – Vishnu
對不起,在level1和level2瀏覽器上都顯示「null」。 – Vishnu