Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Opera中的HTML5文件阅读器_Javascript_Html_Opera_Filereader - Fatal编程技术网

Javascript Opera中的HTML5文件阅读器

Javascript Opera中的HTML5文件阅读器,javascript,html,opera,filereader,Javascript,Html,Opera,Filereader,我正在尝试使用opera 12中的文件读取器api读取多个本地ogg音频文件,方法是将它们转换为数据URL,并将它们存储到我打算稍后访问的数组中 function music(list) { var playlistlength=0; try { for (var temp=0; temp < list.files.length; temp++) { f[p

我正在尝试使用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");
        }
     }
功能音乐(列表)
{
变量长度=0;
尝试
{
对于(var temp=0;temp

但是,在调试器中检查for循环时,没有执行任何语句,它跳转到catch块,无法理解它。有人能解释为什么会发生这种情况,以及可能的其他选择吗?提前感谢。

这在JSFIDLE上有效。我是根据你的代码制作的,你对它的使用类似吗

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;
功能音乐(列表)
{
变量长度=0;
var f=新数组();
尝试
{
对于(var temp=0;temp
为什么它不起作用

  • 首先,您尝试在f[playlinglength][1]中设置一个值,因为 onload函数在 播放长度++。它崩溃了,因为此引用不存在
  • f可能是错误的​
如果您使用
警报(e)而不是
警报(“错误”),你收到了什么消息?谢谢,但alert不是罪魁祸首,ricola3d解决了它。我知道,但如果你能回答我,我们就更容易调试了。下次请不要忽略其他用户的问题。感谢您的帮助,事实证明,您指定的关于异步加载事件的第一个原因就是罪魁祸首,对此做了一些研究,了解到播放长度在数据URL实际加载到数组“f”之前到达数组“f”的末尾,因此它崩溃。我尝试了你的代码,但是我的代码中有其他函数的依赖项,并且没有以这种方式播放加载的音频文件,数据URL显示在opera中,我可以修改它,谢谢,顺便说一句,我尝试使用FileReaderSync,但opera和IE10似乎不支持它。