我的目标是使用来自内容脚本的文件在后台任务中上传文件。
我认为不可能将File对象直接从内容脚本传递到后台,因为chrome.runtime.sendMessage
JSON序列化数据。
可以使用URL.createObjectURL
将字符串网址传递给文件,这有效。但URL与创建它的窗口中的文档相关联(当前选项卡内容脚本)。如果我刷新,导航离开,关闭标签,那些网址将被销毁。
使用FileReader读取整个文件并保留在内存中不是一个选项,因为它会使大文件上的扩展名崩溃。
问题:
URL.createObjectURL
保持活力?答案 0 :(得分:1)
您可以使用SharedWorker
在内容脚本和后台脚本之间创建一个通信通道,允许您传输File
等DOM对象。有关示例,请参阅Does chrome.runtime support posting messages with transferable objects?
快速测试表明,确实可以向后台发送File
,但也显示其内部状态已损坏:您可以使用读取文件内容FileReader
,但您无法通过XMLHttpRequest
上传文件。
我找到了解决办法:假设您的File
存储在file
变量中,您可以使用file.slice(0, file.size)
代替file
来获取即使在将{em>和传递给后台页面之后仍然可以使用和文件支持的Blob
。