从内容脚本将File对象传递给background.js或传递createObjectURL(并在刷新后保持活动状态)

时间:2014-06-18 19:03:14

标签: javascript html5 google-chrome-extension

我的目标是使用来自内容脚本的文件在后台任务中上传文件。

我认为不可能将File对象直接从内容脚本传递到后台,因为chrome.runtime.sendMessage JSON序列化数据。

可以使用URL.createObjectURL将字符串网址传递给文件,这有效。但URL与创建它的窗口中的文档相关联(当前选项卡内容脚本)。如果我刷新,导航离开,关闭标签,那些网址将被销毁。

使用FileReader读取整个文件并保留在内存中不是一个选项,因为它会使大文件上的扩展名崩溃。

问题:

  1. URL.createObjectURL保持活力?
  2. 将文件对象传递给后台?
  3. 使用内容脚本中的文件上传后台任务中的文件?
  4. 将文件链接传递给弹出窗口并在那里提交表单,然后在后台运行?

1 个答案:

答案 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