我需要在扩展程序的 web_accessible_resources
中保留一个 JSON 文件,以便内容脚本可以通过同步 XHR 读取它(同步部分很重要,这就是我使用 XHR 的原因) )。
但是,此文件应该反射(reflect)用户通过扩展程序界面执行的操作,因此当用户在其中更改某些内容时,JSON 文件将由后台页面重写(这可以异步发生)。这样,下次内容脚本读取文件时,它将是最新的。
扩展程序是否可以修改其 web_accessible_resources
下列出的文件?
或者,作为最后一个资源,可以让扩展程序在文本编辑器中打开文件并让用户直接编辑它,但我担心这会让 Chrome 认为扩展程序已被泄露并禁用它。
最佳答案
无法修改扩展中文件的内容。
在这种情况下,您可以使用 chrome.storage.onChanged
事件。
- 您的后台页面会更新
chrome.storage
中的信息。 - 这会触发内容脚本中的
chrome.storage.onChanged
。您可以通过保存数据的本地副本来对此使用react。您甚至不需要查询存储:事件中就有新数据可用。 - 您同步访问数据的本地副本。
这并不能解决内容脚本刚开始执行时获取数据的问题,因为您必须首先异步填充它。但同步 XHR 是一个非常笨拙的想法。
涵盖了更多想法 here 。不过,其中任何一个都是相当复杂的黑客行为,而 Chrome 的 official position is "won't happen" .
附注万一有人真正寻求对 XHR 的可变响应,可以使用 chrome.webRequest API 重定向到包含数据的 data: URI;问题是 URI 本身必须同步构造/可用。
关于javascript - Chrome 扩展程序 : have extension edit its web_accessible_resources,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36698561/