4

由于某种原因,在下面的代码中,evt.target.result是空的。这是为什么?

function drop(evt) {
    evt.stopPropagation();
    evt.preventDefault();

    var file = evt.dataTransfer.files[0];

    handleFiles(file, evt.target);
}

function handleFiles(file, target) {
    loadSongAnimate();

    var reader = new FileReader();

    // init the reader event handlers
    reader.onloadend = handleReaderLoadEnd;

    // begin the read operation
    reader.readAsDataURL(file);
}

function handleReaderLoadEnd(evt) {
    alert('Passing this: ' + evt.target.result);
    document.getElementById('audioTagId').src = evt.target.result;
}
4

2 回答 2

8

来自精美手册

onloadend
读取完成时调用,无论是否成功。onload这在or之后调用onerror

我怀疑您有错误情况。添加一个onerror回调,看看有什么reader.error要说的。您可能希望使用单独onerroronabort、 和onload回调而不是onloadend

onabort
在读取操作中止时调用。

onerror
发生错误时调用。

onload
当读取操作成功完成时调用。

这可能会使处理单个事件变得更容易。


在您的评论中,您说您从其他精美手册中收到“错误 2” :

常量SECURITY_ERR
:2
说明:出于安全原因无法访问该文件。

因此,您似乎收到“权限被拒绝”错误。

于 2011-06-04T19:42:20.923 回答
2

我正在通过本地 file:// 协议编辑和查看文件。当您在另一个本地文件中引用本地文件时,引用的本地文件中的空白标题会引发安全错误。

经验教训...总是上传到服务器进行测试。本来可以节省我几个小时的谷歌搜索和大量的头发。

于 2011-07-11T21:42:39.160 回答