Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将文件对象从内容脚本传递到background.js或传递createObjectURL(刷新后保持活动状态)_Javascript_Html_Google Chrome Extension - Fatal编程技术网

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,我使用了你在这条线索中的答案,通过你的输入,还通过首先切片的方式使对象可转移。如果您愿意,可以将其作为答案提交。