首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从background.js访问内部资源

如何从background.js访问内部资源
EN

Stack Overflow用户
提问于 2014-11-10 06:30:05
回答 3查看 3.8K关注 0票数 5

在Google应用程序中,可以从background.js脚本中访问捆绑的数据文件吗?

例如,如果我在应用程序中包含了一个名为data.json的文件,那么在JavaScript脚本中是否可以使用JavaScript API来获取文件内容?

使用示例包目录结构:

代码语言:javascript
运行
复制
/app/manfifest.json
/app/backround.js
/app/data.json

我想做这样的事情:

代码语言:javascript
运行
复制
chrome.app.runtime.onLaunched.addListener(function() {
  data = unknown.api.loadFileSync("data.json");
  // do stuff with data
  // ...
});
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-10 07:18:20

在API文档中,您可以获得包目录的DirectoryEntry对象,然后使用HTML5 FileSystem API获取文件的内容。API函数是chrome.runtime.getPackageDirectoryEntry

代码语言:javascript
运行
复制
chrome.runtime.getPackageDirectoryEntry(function (dirEntry) {
    dirEntry.getFile("data.json", undefined, function (fileEntry) {
    fileEntry.file(function (file) {
            var reader = new FileReader()
            reader.addEventListener("load", function (event) {
                // data now in reader.result                                                        
                console.log(reader.result);
            });
            reader.readAsText(file);
        });
    }, function (e) {
        console.log(e);
    });
});
票数 4
EN

Stack Overflow用户

发布于 2014-11-10 07:06:27

后台脚本可以使用XHR访问资源。若要获取包含的资源的URL,请使用chrome.extension.getURL(),它将返回资源的完全限定URL。

代码语言:javascript
运行
复制
function loadData (file, fn) {
  var dataUrl = chrome.extension.getURL(file),
      xhr = new XMLHttpRequest();

  xhr.responseType = 'json';
  xhr.onload = function () {
    fn(null, this.response);
  };
  xhr.onerror = function () { fn(this.status); };
  xhr.send();
}


chrome.app.runtime.onLaunched.addListener(function() {
  loadData('data.json', function (err, data) {
    // 
  });
});

另一种方法是将data.json文件转换为data.js文件,并将其作为背景脚本包含在manifest.json中。这将允许您访问data.js设置的任何变量。

manifest.json

代码语言:javascript
运行
复制
"background": {
  "scripts": ["data.js", "background.js"]
}
票数 4
EN

Stack Overflow用户

发布于 2018-05-25 03:13:53

因为火狐不支持getPackageDirectoryEntry,所以不推荐使用它。现在有一种更简单的方法。

代码语言:javascript
运行
复制
async function loadData(resourcePath) {
    var url = chrome.extension.getURL(resourcePath);
    return (await fetch(url)).text();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26838004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档