FileReader API:查看回调之外的内容

时间:2012-12-03 14:34:44

标签: javascript html5 filereader

我一直在使用FileReader API来读取本地文件并将它们提供给Java applet,现在这已经奏效了。文件被读取,applet的行为就像它应该的那样。将文件内容(作为String)传递给applet的函数当前被调用INSIDE分配给Reader的onloadend()事件的函数(我使用onloadend()insteat而不是onload()来处理一些错误处理需求。也许我可以用try / catch指令替换它,我会调查它。现在我想将文件的内容传递给全局变量,以便用Javascript解析它。问题是这似乎是不可能的,因为:

1)文件加载后FileReader对象的.result成员为空(这有意义,看看读者本身是如何异步的);

2)如果我将.result成员复制到全局变量中,例如如果我这样做:

var my_string;

function load_callback()
{
   //Do some stuff...
   my_string = this.result;
}

...

my_reader = new FileReader();
my_reader.onloadend = load_callback;
my_reader.readAsText(my_file)
document.getElementById("empty_paragraph").innerHTML = my_string;

结果我得到了一个很好的undefined(这真的没有多大意义)。 我该怎么办?这是一些其他安全功能,使FileReader无法在其回调方法之外传播文件的内容吗?在任何人提到它之前 - 是的,文件已经由用户正确提交(正如我所说的,页面的其余部分工作);是的,我已检查名称my_string是否以任何方式重复;我已经在Chromium和Firefox上测试了这个,所以它不依赖于浏览器。有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

同步文件阅读器仅在WebWorker上下文中可用,因为阻止工作线程不会导致UI冻结。无论如何,无法查看回调之外的内容,除非您使用

<script type="application/javascript;version=1.7"></script>

仅适用于firefox。它允许您使用yield关键字,该关键字可用于实现fibers,可用于以同步方式编写异步代码。