【问题标题】:Trouble with the "File API: Directories and System" in Google ChromeGoogle Chrome 中的“文件 API:目录和系统”出现问题
【发布时间】:2012-03-29 19:12:10
【问题描述】:

阅读 this article 关于在 Google Chrome 中使用 HTML5 文件系统 API 后,我决定尝试将其整合到打包的 Web 应用程序中。

使用注释和提供的代码作为指导,我整理了一个相当长的脚本,如下所示:

var FSA = FSA || {};
var fsys, root, fileReader, dropReader, dropContainer, btn = [];
window.addEventListener("load", function () {
    window.requestFileSystem(PERSISTENT, 5242880 /* ~5MB */, function(fs) {
        fsys = fs;
        root = fsys.root;
    }, FSA.error);
});
function createFile(path) { 
    root.getFile(path, {create:true, exclusive:true}, function() {
        console.log(path+ " file created"); 
    }, FSA.error); 
};
function saveFile(name, data, mimetype) {
    var e = this || null;
    name = name || e.target.name;
    data = data || e.target.result;
    mimetype = mimetype || e.target.type;
    root.getFile(name, {create: true}, function(fileEntry) {
        fileEntry.createWriter(function(writer) {
            writer.onwrite = function(e) {
                console.log(name + ' written successfully to filesystem.');
                FSA.getFile(name);
            };
            writer.onerror = function(e) {
                console.log('Write failed: ' + e);
            };
            var bb = new BlobBuilder();
            bb.append(data);
            writer.write(bb.getBlob(mimetype));
        });
    }, FSA.error);
};
function openFile(file, fileTarget) {
    root.getFile(file.name, null, function(entry) {
        entry.file(function(file) {
                reader = new FileReader();
                reader.filename = file.name;
                reader.onload = function(e) {
                    fileTarget = e.target.result;
                };
                reader.readAsText(file);
        }, FSA.error);
    }, FSA.error);
};

而且,在某种程度上,它似乎奏效了。我可以使用 createFile 函数创建文件,也可以使用 saveFile 函数保存文件。但是,我似乎无法使用 openFile 函数,并且所有三个函数都在 JavaScript 控制台中返回以下错误:

Uncaught TypeError: Cannot call method 'getFile' of undefined

我认为问题与变量 root 有关,但我可能错了。

由于这是一个新的 API,并且是一个草案规范,因此很少有文档可以帮助解决这个问题。

谁能指出问题,如果可以,提供解决方案?

感谢您的帮助。

编辑:我正在使用“10.0.639.0 canary build”,所以我相信我的浏览器应该允许在扩展中使用 API。

【问题讨论】:

标签: javascript html google-chrome html5-filesystem


【解决方案1】:

目前,FileSystem API getFile 不适用于任何 Chrome 8 的扩展程序。如果您想使用 getFile 创建新文件,则需要运行以在外部托管的网页中运行代码。

Chrome 9+ 中的扩展程序将支持它。更多信息请阅读HTML5 Chromium mailing list post

我正在运行 Google Chrome 10.0.634.0 开发频道。在检查员内部:

window.requestFileSystem(PERSISTENT, 5242880 /* ~5MB */, function(fs) {
  root = fs.root;
})
root.getFile

返回:

function getFile() { [native code] }

【讨论】:

  • 感谢您的评论。我正在对“10.0.639.0 canary build”进行测试。您的代码在我的浏览器上返回相同的结果。
  • 您是在扩展程序上执行此操作还是作为普通网站执行此操作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多