Javascript 将文件对象从内容脚本传递到background.js或传递createObjectURL(刷新后保持活动状态)
我的目标是在后台任务中上载一个来自内容脚本的文件 我认为不可能将文件对象直接从内容脚本传递到后台,因为Javascript 将文件对象从内容脚本传递到background.js或传递createObjectURL(刷新后保持活动状态),javascript,html,google-chrome-extension,Javascript,Html,Google Chrome Extension,我的目标是在后台任务中上载一个来自内容脚本的文件 我认为不可能将文件对象直接从内容脚本传递到后台,因为chrome.runtime.sendMessageJSON会序列化数据 可以使用url.createObjectURL将字符串url传递到文件,这样做很有效。但是URL绑定到创建它的窗口中的文档(当前选项卡内容脚本)。如果我刷新,导航离开,关闭那些URL被破坏的选项卡 使用FileReader读取整个文件并将其保留在内存中不是一个选项,因为它会使大型文件的扩展崩溃 问题: 保持URL.crea
chrome.runtime.sendMessage
JSON会序列化数据
可以使用url.createObjectURL
将字符串url传递到文件,这样做很有效。但是URL绑定到创建它的窗口中的文档(当前选项卡内容脚本)。如果我刷新,导航离开,关闭那些URL被破坏的选项卡
使用FileReader读取整个文件并将其保留在内存中不是一个选项,因为它会使大型文件的扩展崩溃
问题:
URL.createObjectURL
处于活动状态您可以使用
SharedWorker
在内容脚本和后台脚本之间创建一个通信通道,该通道允许您传输DOM对象,例如File
s。有关示例,请参见中的代码
快速测试表明确实可以将文件
发送到后台,但也表明其内部状态已损坏:您可以使用文件读取器
读取文件内容,但无法通过XMLHttpRequest
上传文件
不过,我找到了一个解决方法:假设您的
文件
存储在文件
变量中,您可以使用File.slice(0,File.size)
而不是文件
,以获取一个Blob
,该Blob仍然由该文件支持,并且即使在将其传递到后台页面后仍可在XMLHttpRequest
中使用。Q1:不可能。第二季度和第三季度。完全由……回答。Q4:你的意思是什么?谢谢@RobW,我使用了你在这条线索中的答案,通过你的输入,还通过首先切片的方式使对象可转移。如果您愿意,可以将其作为答案提交。