2014-11-10 3 views
3

В приложении Google Chrome можно получить доступ к связанным файлам данных из сценария background.js?Как получить доступ к внутренним ресурсам из background.js

E.g. если у меня есть файл с именем data.json, который я включаю в приложение, есть ли JavaScript-API, который я мог бы использовать в сценарии background.js, чтобы получить содержимое файлов?

С примерной структурой каталогов расслоения:

/app/manfifest.json 
/app/backround.js 
/app/data.json 

Я хочу сделать что-то вроде:

chrome.app.runtime.onLaunched.addListener(function() { 
    data = unknown.api.loadFileSync("data.json"); 
    // do stuff with data 
    // ... 
}); 

ответ

3

В API Docs вы можете получить DirectoryEntry объект для каталога пакета, а затем с помощью HTML5 API FileSystem получить содержимое файла. Функция API - chrome.runtime.getPackageDirectoryEntry.

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); 
    }); 
}); 
+0

Этот ответ лучше подходит для меня. Поскольку я использую манифест версии 2 для своего приложения, я не мог использовать '' web_accessible_resources''. – Harry

4

фоновых сценариев может получить доступ к ресурсам с помощью XHR. Чтобы получить URL-адрес включенного ресурса, используйте chrome.extension.getURL(), который возвращает полный URL-адрес ресурса.

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:

"background": { 
    "scripts": ["data.js", "background.js"] 
} 
+0

Спасибо за ответ, однако я нашел способ сделать это, не используя запрос ajax. Я отправил свой вопрос слишком рано! – poida

Смежные вопросы