Javascript JS:将DataTransferItemList传输到WebWorker
我想使用SynchronousJS文件系统API,因此,这段代码必须放在webworker上。webworker的传入数据取自dragndrop事件(dataTransfer.items),以便能够使用chromes最新功能上载文件夹。 不幸的是,chrome取消了每一次尝试,并出现了一个“未捕获错误:数据\u克隆\u错误:DOM异常25” 基本上是这样的:Javascript JS:将DataTransferItemList传输到WebWorker,javascript,html,drag-and-drop,web-worker,Javascript,Html,Drag And Drop,Web Worker,我想使用SynchronousJS文件系统API,因此,这段代码必须放在webworker上。webworker的传入数据取自dragndrop事件(dataTransfer.items),以便能够使用chromes最新功能上载文件夹。 不幸的是,chrome取消了每一次尝试,并出现了一个“未捕获错误:数据\u克隆\u错误:DOM异常25” 基本上是这样的: var files=e.dataTransfer.items; [copying the DataTransferItemList]
var files=e.dataTransfer.items; [copying the DataTransferItemList]
var worker=new Worker(...)
worker.postMessage(files);
这是行不通的。知道吗,为什么?
这里可以找到一个类似(但不是100%相同)的例子:-这似乎有效。它不是DataTransferItemList,而是那里的文件列表-这种类型的列表不能序列化吗
谢谢,
Christoph您应该使用
event.dataTransfer.files
来获取文件列表。然后,您可以将其直接发布给员工:
var files=e.dataTransfer.files || e.target.files; // Cross browser FileList
var worker=new Worker(...);
worker.postMessage({files: files});
看,这是一个有趣的问题。但对于starter,您不会通过将对象分配给不同的变量来复制它。该规则适用于所有使用垃圾收集器的语言。您只能向web worker发布字符串或字节数组,但我希望将来会有一个解决方案