问题 如何从chrome扩展中读取文件?


我有popup.html,当点击浏览器操作加载弹出窗口时调用popup.js。我在那里以编程方式注入内容脚本 chrome.tabs.executeScript()。我需要在页面的主体上附加一个元素。如何在扩展中插入来自不同.html文件的HTML代码,因为这样维护代码要容易得多。我想在popup.js中访问它(是否有一些API调用?)然后在其中 code 使用检索到的HTML代码字符串插入内容脚本代码的属性。

我看到了一些方法 XMLHttpRequest 来自内容脚本,但有没有避免这种情况?我试过了 chrome.fileSystem,但这是针对Chrome应用而非扩展。


2012
2018-03-04 15:17


起源

我确实说过我不想在XMLHttpRequest中使用Ajax请求。有没有办法从popup.js加载另一个不是内容脚本的HTML? - Tommz


答案:


正如提到的评论,这只是向GET请求提出的问题 chrome.runtime.getURL("myfile.html"),哪里 "myfile.html" 是相对路径(从扩展的根目录)到您想要的文件。

您可以使用原始XHR执行此操作,或者,如果您使用的是jQuery,则可以使用 $.ajax

要从内容脚本执行此操作,您需要将其声明为 "web_accessible_resources"


既然你不想这样,是的,还有另一种方式(内容脚本不可用)。

您可以获得只读 HTML5文件系统 使用访问您的扩展程序的文件 chrome.runtime.getPackageDirectoryEntry

chrome.runtime.getPackageDirectoryEntry(function(root) {
  root.getFile("myfile.html", {}, function(fileEntry) {
    fileEntry.file(function(file) {
      var reader = new FileReader();
      reader.onloadend = function(e) {
        // contents are in this.result
      };
      reader.readAsText(file);
    }, errorHandler);
  }, errorHandler);
});

如您所见,这比XHR请求复杂得多。人们可能只在有人愿意的时候使用它 列出文件


16
2018-03-04 15:21



令我困惑的是 - 内容脚本是插入查看页面的内容,但是其他javascript文件(例如运行带扩展弹出窗口)不是,他们应该有办法访问扩展中的其他文件,isn那是这样的吗?这些脚本是否还需要进行ajax调用? - Tommz
对不起,我发现你的要求很晚了。我正在编辑答案。 - Xan
是的,是的。这真的要复杂得多。谢谢你的解释。 - Tommz
路径始终始于 /crxfs/? - Winand