javascript - Mozilla 中未触发 FileReader onloadstart
javascript - FileReader onloadstart not fired in Mozilla
因此,我正在使用 FileReader
读取用户选择的文件,在 Chrome 中一切正常。但是,在 Mozilla 中,不会触发 onloadstart
事件。 The official page 声明此类事件侦听器确实存在。我错过了什么吗?
这是我的代码:
function handleUploadFile() {
if(window.FileReader) {
const fileChooser = document.createElement('input');
fileChooser.setAttribute('type', 'file');
document.body.appendChild(fileChooser);
fileChooser.addEventListener('change', e => {
const selectedFile = e.target.files[0];
if(selectedFile) {
const filename = selectedFile.name.split('.');
const extension = filename[filename.length - 1];
if (_.indexOf(['csv', 'dat'], extension.toLowerCase()) < 0) {
alert('The file must be of type ".csv" or ".dat"');
return;
}
const f = new FileReader();
f.readAsText(selectedFile);
f.onloadstart = (ev) => {
console.log('start');
};
f.onloadend = (ev) => {
console.log('end');
const content = ev.target.result;
this.parseFile(content, selectedFile.name, extension);
};
f.onerror = (ev) => {
console.error(ev.target.error);
};
} else {
console.error('Failed to load file');
}
});
fileChooser.click();
document.body.removeChild(fileChooser);
} else {
alert('The File APIs are not fully supported by your browser.');
}
}
onloadstart 事件在您收听之前触发。所以你需要像这样改变顺序:
const f = new FileReader();
f.onloadstart = (ev) => {
console.log('start');
};
f.onloadend = (ev) => {
console.log('end');
const content = ev.target.result;
this.parseFile(content, selectedFile.name, extension);
};
f.onerror = (ev) => {
console.error(ev.target.error);
};
f.readAsText(selectedFile); //moved this line to the bottom
因此,我正在使用 FileReader
读取用户选择的文件,在 Chrome 中一切正常。但是,在 Mozilla 中,不会触发 onloadstart
事件。 The official page 声明此类事件侦听器确实存在。我错过了什么吗?
这是我的代码:
function handleUploadFile() {
if(window.FileReader) {
const fileChooser = document.createElement('input');
fileChooser.setAttribute('type', 'file');
document.body.appendChild(fileChooser);
fileChooser.addEventListener('change', e => {
const selectedFile = e.target.files[0];
if(selectedFile) {
const filename = selectedFile.name.split('.');
const extension = filename[filename.length - 1];
if (_.indexOf(['csv', 'dat'], extension.toLowerCase()) < 0) {
alert('The file must be of type ".csv" or ".dat"');
return;
}
const f = new FileReader();
f.readAsText(selectedFile);
f.onloadstart = (ev) => {
console.log('start');
};
f.onloadend = (ev) => {
console.log('end');
const content = ev.target.result;
this.parseFile(content, selectedFile.name, extension);
};
f.onerror = (ev) => {
console.error(ev.target.error);
};
} else {
console.error('Failed to load file');
}
});
fileChooser.click();
document.body.removeChild(fileChooser);
} else {
alert('The File APIs are not fully supported by your browser.');
}
}
onloadstart 事件在您收听之前触发。所以你需要像这样改变顺序:
const f = new FileReader();
f.onloadstart = (ev) => {
console.log('start');
};
f.onloadend = (ev) => {
console.log('end');
const content = ev.target.result;
this.parseFile(content, selectedFile.name, extension);
};
f.onerror = (ev) => {
console.error(ev.target.error);
};
f.readAsText(selectedFile); //moved this line to the bottom