【发布时间】:2017-02-08 09:06:07
【问题描述】:
我正在尝试使用WebExtensions 结构为Firefox 编写一个小插件。
此插件应通过其绝对路径读取本地文件内容:
"/home/saba/desktop/test.txt"
manifest.json
{
"manifest_version": 2,
"name": "Test - load files",
"version": "0.0.1",
"description": "Test - load files",
"permissions": [ "<all_urls>" ],
"background": {
"scripts": [ "main.js" ]
}
}
到目前为止我尝试过的内容(在 main.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");
失败。
我不明白为什么它总是返回一个空响应
(test.txt包含“test”,路径正确)
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");
但由于file 参数,我在这里卡住了。
此方法通常与返回 .files 数组的 input type="file" 标记配合使用。 (但我只有一个本地路径字符串)
我搜索了是否可以使用绝对本地文件路径创建新的 Blob 或 File var,但似乎不可能。
使用WebExtensions API
我没有从文档页面中找到有关如何执行此操作的任何线索。
难道没有(可能)某种WebExtensions API 可以像在SDK 中那样实现这一点吗?
https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/io_file
https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/io_text-streams
我做错了什么或错过了什么?
..是否可以通过 WE Add-on 的绝对路径获取本地文件的内容?
【问题讨论】:
-
'file:///'+_path会导致file:////home/saba/desktop/test.txt- 我认为那里也可能有/ -
我尝试删除
/,不幸的是同样的结果 -
可能使用 file:// 网址。
-
没有用于打开文件的 WebExtension API,另请参阅 bugzilla.mozilla.org/show_bug.cgi?id=1246236。你可以使用
<input type=file>。 -
@evilpie ..所以我正在尝试做的事情没有解决方案(atm)。我会继续使用 SDK 插件,即使他们要弃用它。
标签: javascript firefox-addon-webextensions