旧设备上包含三星默认浏览器的Android浏览器很少支持
xhr.upload.onprogress
事件。因此,我们无法在该浏览器上显示实时上传进度。
如何检测这些浏览器? 所以我可以更改我的设置以显示进度。
答案 0 :(得分:2)
HM。测试了一个非常老的Firefox。 3.5.2。
具有(new XMLHttpRequest).upload
属性的第一个版本。
当前版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.
因此,如果浏览器发送时间不大,则旧浏览器上没有pregress
个事件。
但load
.loaded == .total
事件正常被解雇。
<小时/> 目前的结论:旧浏览器的数据发送速度太快。
答案 1 :(得分:2)
简单地说:
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));
}
答案 2 :(得分:0)
以下是在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;
}
}