Firefox WebExtensions, получить содержимое локальных файлов по пути

я пытаюсь написать небольшое дополнение для firefox, используя WebExtensions структура.

это дополнение должно считывать содержимое локального файла по абсолютному пути:
"/дом/Саба/рабочий стол/тест.txt"

манифест.в JSON

{

    "manifest_version": 2,
    "name": "Test - load files",
    "version": "0.0.1",

    "description": "Test - load files",
    "permissions": [ "<all_urls>" ],

    "background": {
        "scripts": [ "main.js" ]
    }

}


вот что я пробовал до сих пор (внутри основного.в JS):



используя XMLHttpRequest

function readFileAjax(_path){

    var xhr = new XMLHttpRequest();

    xhr.onloadend = function(event) {
        console.log("onloadend", this);
    };

    xhr.overrideMimeType("text/plain");
    xhr.open("GET", "file:///"+_path);
    xhr.send();
}

readFileAjax("/home/saba/desktop/test.txt");

не удалось. Я не могу понять, почему он всегда возвращает пустой ответ
(испытание.txt содержит "тест", путь правильный)

onloadend XMLHttpRequest { 
    onreadystatechange: null, 
    readyState: 4, 
    timeout: 0, 
    withCredentials: false, 
    upload: XMLHttpRequestUpload, 
    responseURL: "", 
    status: 0, 
    statusText: "", 
    responseType: "", 
    response: "" 
}




используя FileReader

function readFileFR(_path){

    var reader  = new FileReader();

    reader.addEventListener("loadend", function() {
       console.log("loadend", this.result)
    });

    reader.readAsText(file);  // file ???? 
}

readFileFR("/home/saba/desktop/test.txt");

но здесь я застрял из-за

1 ответов


Я наконец нашел способ сделать это с помощью Fetch запросы и FileReader API-интерфейсы.

вот что я придумал:

function readFile(_path, _cb){

    fetch(_path, {mode:'same-origin'})   // <-- important

    .then(function(_res) {
        return _res.blob();
    })

    .then(function(_blob) {
        var reader = new FileReader();

        reader.addEventListener("loadend", function() {
            _cb(this.result);
        });

        reader.readAsText(_blob); 
    });
};

используя пример в моем вопросе, вот как его использовать:

readFile('file:///home/saba/desktop/test.txt', function(_res){

    console.log(_res); // <--  result (file content)

});