firefox-addon-sdk之Firefox Addon SDK 中的 HTML5 文件 API

lori 阅读:16 2024-10-01 17:34:08 评论:0

有没有办法在内容脚本中访问 Fire Fox addon sdk 中的 Html5 文件 api?

这是为了存储用户添加的单词及其含义所必需的。数据可能会变大,因此本地存储不是一种选择。

 window.requestFileSystem3 = window.requestFileSystem || window.webkitRequestFileSystem; 

给我错误 TypeError: window.requestFileSystem3 is not a function

我问这个是因为我正在从允许访问内容脚本中的文件 api 的 Google Chrome 扩展程序移植此代码。

其他问题

1) 如果不允许使用 HTML5 文件 API,那么我应该使用 file模块?

2) 文件模块是否允许访问文件系统上的任何文件,而不是 Html5 文件 api,它只能访问对文件系统的沙盒访问?

3) 假设我必须使用文件模块什么是存储我的文件的最佳位置(如用户配置文件目录或扩展目录)以及我如何在代码中获取此路径。

对于这个问题中的这么多子问题,我深表歉意。 Google 对此主题的帮助不是很大。

任何示例代码都会非常有帮助。

请您参考如下方法:

Firefox 尚不支持通过 File API 写入文件,即使添加了此功能,它也可能只能被网页访问,而不能被扩展访问。换句话说:是的,如果您绝对需要写入文件,那么您应该使用低级 API。您希望将数据存储在用户配置文件目录中(没有扩展目录,您的扩展通常作为单个打包文件安装)。像这样的东西应该可以写一个文件:

var file = require("sdk/io/file"); 
var profilePath = require("sdk/system").pathFor("ProfD"); 
var filePath = file.join(profilePath, "foo.txt"); 
var writer = file.open(filePath, "w"); 
writer.writeAsync("foo!", function(error) 
{ 
  if (error) 
    console.log("Error: " + error); 
  else 
    console.log("Success!"); 
}); 

供引用:sdk/io/file , sdk/system

您可以使用 TextReader.read()file.read() 来读取文件。不幸的是,Add-on SDK 似乎不支持异步文件读取,因此读取会阻塞 Firefox UI。唯一的选择是导入 NetUtilFileUtils通过 chrome 权限,像这样:

var {components, Cu} = require("chrome"); 
var {NetUtil} = Cu.import("resource://gre/modules/NetUtil.jsm", null); 
var {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm", null); 
NetUtil.asyncFetch(new FileUtils.File(filePath), function(stream, result) 
{ 
  if (components.isSuccessCode(result)) 
  { 
    var data = NetUtil.readInputStreamToString(stream, stream.available()); 
    console.log("Success: " + data); 
  } 
  else 
    console.log("Error: " + result); 
}); 


标签:HTML5
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号