現在、IE (すべてのバージョン) を除くほとんどすべての Web ブラウザーで可能です。
JavaScript はかなり単純です。sourceforge.net で webfolder プロジェクトを確認してください。HTML5 をサポートするすべてのブラウザのアップロード % が表示されます。
function upload() {
document.folder.encoding = "multipart/form-data";
if (document.folder.file.files) {
var xhr = new XMLHttpRequest();
var fd = new FormData(document.folder);
/* event listeners */
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false); // loadend if doesn't matter success or not
xhr.addEventListener("error", uploadError, false);
xhr.open("POST", document.folder.action, true);
fd.append('submit', 'Upload'); // keep consistent with view, so maybe return method in view
fd.append('background', '1');
xhr.send(fd);
return false;
}
return true;
}
function uploadProgress(evt) {
if (evt.lengthComputable) {
var per = (evt.loaded*100/evt.total).toFixed(0)+'%';
getElement('_progress').innerHTML = per;
document.title = 'Upload ('+per+')';
} else {
getElement('_progress').innerHTML = evt.loaded;
}
}
function uploadComplete(evt) {
getElement('_progress').innerHTML = '100%';
window.location.reload();
}
function uploadError(evt) {
getElement('_progress').innerHTML = 'error';
}
より面白い機能を備えたサイトの進行状況バーを表示するコードもあります。