如何从同一Google Chrome扩展程序中检查资源是否存在?

时间:2014-11-29 17:26:38

标签: javascript google-chrome google-chrome-extension

说我的解压缩 Google Chrome扩展程序中包含以下文件:

  • 的manifest.json
  • my.extension.js
  • image.png

如何使用image.png中的Javascript检查my.extension.js是否存在?

编辑:

我知道(我认为它会起作用)我们可以创建<img>元素并使用onerror事件或使用XMLHttpRequest来检查存在,但我正在寻找一个更好的(?)替代解决方案,如果有的话。

2 个答案:

答案 0 :(得分:3)

  1. my.extension.js声明为event pagebackground page Content Scripts将无法使用以下方法,因为chrome.* API provided in content scripts is limited

  2. 使用基于chrome.runtime.getPackageDirectoryEntryXan建议的HTML 5 Filesystem API来访问资源文件,从而可以检查文件是否存在。

  3. <强>的manifest.json

    {
      "background": {
        "scripts": ["my.extension.js"],
        "persistent": false
      },
      "manifest_version": 2,
      "name": "Check Resource Existence",
      "version": "1.0",
    }
    

    <强> my.extension.js

    filename = "image.png";
    
    chrome.runtime.getPackageDirectoryEntry(function(storageRootEntry) {
      fileExists(storageRootEntry, filename, function(isExist) {
        if(isExist) {
          /* your code here */
        }
      });
    });
    
    function fileExists(storageRootEntry, fileName, callback) {
      storageRootEntry.getFile(fileName, {
        create: false
      }, function() {
        callback(true);
      }, function() {
        callback(false);
      });
    }
    

答案 1 :(得分:2)

您可以查看chrome.runtime.getPackageDirectoryEntry

  

chome.runtime.getPackageDirectoryEntry(function callback)

     

返回包目录的DirectoryEntry。

然后,您就可以在扩展程序中列出文件了。有关示例,请参阅this answer

那就是说,你的XHR方法也应该有效。你只需要抓住那个错误。