Google chrome extension 将blob URL从网站传递到Chrome扩展

Google chrome extension 将blob URL从网站传递到Chrome扩展,google-chrome-extension,Google Chrome Extension,我很难在Chrome扩展的背景页面中使用我网站上的blobURL。也就是说,我使用URL.createObjectURL从网站上的内存中blob实例创建blob URL,然后将该URL传递给扩展(使用chrome.runtime.connect API)。但是,在使用fetch(…)从扩展内部的URL读取时,我得到以下错误: Fetch API cannot load blob:http://localhost:4200/a7188b44-f80e-4bfd-a63a-4a92f2f48424.

我很难在Chrome扩展的背景页面中使用我网站上的blobURL。也就是说,我使用URL.createObjectURL从网站上的内存中blob实例创建blob URL,然后将该URL传递给扩展(使用chrome.runtime.connect API)。但是,在使用fetch(…)从扩展内部的URL读取时,我得到以下错误:

Fetch API cannot load blob:http://localhost:4200/a7188b44-f80e-4bfd-a63a-4a92f2f48424.
URL scheme must be "http" or "https" for CORS request.

这是我可以通过修改扩展清单中的CSP来解决的问题吗?基本上,我希望避免序列化Blob的内容并使用postMessage将其发送到扩展。这可能很慢,而且更糟,会导致大量的“内存吞吐量”,这是Chrome喜欢崩溃的原因。

可能与此有关。您是简单地获取(url)还是添加一些头/参数?到目前为止,我只使用获取(bloburl),即不添加任何请求头。将尝试修补“Origin”标题,但不确定在扩展的背景脚本中是否可以(不要这么认为)。谢谢你指出这个问题。我以前没见过这个。假设设置“Origin”头不起作用,我想我需要寻找避免序列化blob的替代方法。在这方面:我想知道是否可以使用内容脚本来使用window.postMessage API(与chrome.runtime.*消息传递API不同,它允许可转移的ArrayBuffers)。我的想法是webseite调用window.postMessage,也就是说,posts到它自己,内容脚本(充当代理)可以拦截它,然后再次调用postMessage到扩展的背景页面。您可以添加一个iframe,该iframe指向通过web可访问资源允许的扩展页面,在内容脚本中执行iframe.contentWindow.postMessage,然后在iframe内部,您可以通过chrome.extension.getBackgroundPage直接与背景页面共享数据,因为iframe将完全访问chrome API。或者您可以在iframe内部处理事情。可能是相关的。您是简单地获取(url)还是添加一些头/参数?到目前为止,我只使用获取(bloburl),即不添加任何请求头。将尝试修补“Origin”标题,但不确定在扩展的背景脚本中是否可以(不要这么认为)。谢谢你指出这个问题。我以前没见过这个。假设设置“Origin”头不起作用,我想我需要寻找避免序列化blob的替代方法。在这方面:我想知道是否可以使用内容脚本来使用window.postMessage API(与chrome.runtime.*消息传递API不同,它允许可转移的ArrayBuffers)。我的想法是webseite调用window.postMessage,也就是说,posts到它自己,内容脚本(充当代理)可以拦截它,然后再次调用postMessage到扩展的背景页面。您可以添加一个iframe,该iframe指向通过web可访问资源允许的扩展页面,在内容脚本中执行iframe.contentWindow.postMessage,然后在iframe内部,您可以通过chrome.extension.getBackgroundPage直接与背景页面共享数据,因为iframe将完全访问chrome API。或者您可以在iframe内部处理事情。