【问题标题】:How would I read the file contents of a file in my app/extension's crx?如何在我的应用程序/扩展程序的 crx 中读取文件的文件内容?
【发布时间】:2015-04-19 17:59:19
【问题描述】:

我想在我的 crx 中包含一些文件,然后能够将它们作为数据读入(读入字符串或 Blob)。我该怎么做?有没有办法为此使用 FileSystem API?

【问题讨论】:

    标签: google-chrome google-chrome-extension google-chrome-app


    【解决方案1】:

    chrome.runtime.getPackageDirectoryEntry 于 2013 年 6 月 13 日实施,预计在 Chrome 29 中:

    Issue 177208:添加只读文件系统 API 以访问打包的应用程序/扩展资源

    更改:https://chromiumcodereview.appspot.com/16470003

    【讨论】:

    • 谢谢。所以在 Chrome 29 之前,没有办法。好吧,除非用户选中该框以允许文件访问整个计算机。
    • 您应该能够同时对它们进行 XHR 处理。应用程序无需特殊权限即可读取其扩展目录中的文件。那不适合你吗?如果不发布一些代码,我们将尝试让它工作:它应该工作。我们添加 getPackageDirectoryEntry 只是为了提高性能(您可以寻找)和方便(您可以迭代,即您不需要对文件列表进行硬编码)。
    • @BenWells 谢谢。我将用于 XHR 的 URL 是什么?我是否需要将这些文件设置为web_accessible
    • @BenWells 我将使用什么 URL 来 XHR 文件?会不会只是亲戚?或file://WHAT_GOES_HERE/myfile.txt?
    【解决方案2】:

    通过 XHR 从 crx 读取文件内容比 FileSystem API 简单得多:

    var url = chrome.extension.getURL('the_file.txt'); // full url
    var req = new XMLHttpRequest(); // read via XHR
    req.open('GET', url);
    req.onreadystatechange = function(e) {
      if (req.readyState === 4 && req.status === 200) {
        console.log(data);
      } else {
        // error
      }
    }
    

    如果要在注入的上下文中发出请求,则必须首先在manifest.json 中声明可访问资源,在可访问资源条目中列出文件名(支持通配符)。

    "web_accessible_resources": [
        "path_to_the_file.html",
        "just_another_folder/*.txt"
    ]
    

    【讨论】:

    • 这适用于 chrome 应用程序吗?这不是扩展
    • @DonRhummy 哦,我还没有在应用程序中尝试过。这个 sn-p 来自我编写的一个扩展,它的作用就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多