JS:将DataTransferItemList传输到WebWorker

Chr*_*dau 5 javascript html5 drag-and-drop web-worker

我想使用同步的JS FileSystem API,因此,这个代码必须放到webworker上.webworker的传入数据来自dragndrop事件(dataTransfer.items),以便能够使用chromes最新的capabilitiy来上传文件夹.遗憾的是,每次尝试都被Chrome取消,并显示"Uncaught Error:DATA_CLONE_ERR:DOM Exception 25".

基本上,它是这样的:

  var files=e.dataTransfer.items; [copying the DataTransferItemList]
  var worker=new Worker(...)
  worker.postMessage(files);
Run Code Online (Sandbox Code Playgroud)

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

谢谢,克里斯托夫

Ste*_*fan 0

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

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