我正在尝试使用 Opera 12 中的文件读取器 API 来读取多个本地 ogg 音频文件,方法是将它们转换为数据 url 并将它们存储到我打算稍后访问的数组中。
function music(list)
{
var playlistlength=0;
try
{
for (var temp=0; temp < list.files.length; temp++)
{
f[playlistlength][0] = list.files.item(temp).name;
var freader = new FileReader();
freader.onload = function(frevent){
f[playlistlength][1]=frevent.target.result;
};
freader.readAsDataURL(list.files[temp]);
playlistlength++;
}
}
catch(e)
{
alert("Error");
}
}
然而,在调试器中检查时,在 for 循环中,没有执行任何语句,而是跳转到 catch block ,无法弄清楚。有人可以解释为什么会发生这种情况以及可能的替代方案吗?提前致谢。
最佳答案
这适用于 jsFiddle。我是根据你的代码制作的,你的用法是否相似?
HTML:
<input type="file" id="browser"/>
Javascript:
function music(list)
{
var playlistlength=0;
var f = new Array();
try
{
for (var temp=0; temp < list.files.length; temp++)
{
var music = new Array();
music[0] = list.files.item(temp).name;
var freader = new FileReader();
freader.onload = function(frevent){
music[1]=this.result;
f.push(music);
alert(f);
};
freader.readAsDataURL(list.files[temp]);
playlistlength++;
}
alert(f);
}
catch(e)
{
alert(e);
}
}
function FileSelectHandler(e) {
var list = e.target || e.originalEvent.dataTransfer;
music(list);
}
document.getElementById("browser").onchange = FileSelectHandler;
为什么它不起作用?
- 首先,您尝试在 f[playliSTLength][1] 中设置一个值,因为 onload 函数在之后异步执行 播放列表长度++。它崩溃了,因为该引用不存在。
- f 可能是错误声明的
关于javascript - Opera 中的 HTML5 文件阅读器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11365260/