JS:将DataTransferItemList传输到WebWorker

时间:2012-12-26 13:13:41

标签: javascript html5 drag-and-drop web-worker

我想使用同步的JS FileSystem API,因此,必须将此代码放到webworker上。 webworker的传入数据来自dragndrop事件(dataTransfer.items),以便能够使用chromes最新的capabilitiy来上传文件夹。 遗憾的是,每次尝试都被Chrome取消,并显示“未捕获错误:DATA_CLONE_ERR:DOM例外25”。

基本上,就像这样:

  var files=e.dataTransfer.items; [copying the DataTransferItemList]
  var worker=new Worker(...)
  worker.postMessage(files);

这不起作用。任何想法,为什么? 可以在这里找到类似(但不是100%相同)的例子:http://www.html5rocks.com/en/tutorials/file/filesystem-sync/ - 这似乎有效。它不是DataTransferItemList,它是一个FileList - 不能将这种类型的List序列化吗?

谢谢, 克里斯托弗

1 个答案:

答案 0 :(得分:0)

您应该使用event.dataTransfer.files来获取FileList。然后你可以直接发布给工人:

var files=e.dataTransfer.files || e.target.files; // Cross browser FileList
var worker=new Worker(...);
worker.postMessage({files: files});