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