1

我需要从我的 chrome 扩展程序写入文件。我读到我可以为此使用 html5 文件 API。我复制了一段我在网上找到的简单代码,但它得到了 FileError.NOT_FOUND_ERR 异常。

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    var gig=tab.url;
    var server_url="";
    if(lst_frame.length > 0){
        console.log(JSON.stringify(lst_frame, null, 2));

window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem; 
function errorHandler(e) {
  var msg = '';

  switch (e.code) {
    case FileError.QUOTA_EXCEEDED_ERR:
      msg = 'QUOTA_EXCEEDED_ERR';
      break;
    case FileError.NOT_FOUND_ERR:
      msg = 'NOT_FOUND_ERR';
      break;
    case FileError.SECURITY_ERR:
      msg = 'SECURITY_ERR';
      break;
    case FileError.INVALID_MODIFICATION_ERR:
      msg = 'INVALID_MODIFICATION_ERR';
      break;
    case FileError.INVALID_STATE_ERR:
      msg = 'INVALID_STATE_ERR';
      break;
    default:
      msg = 'Unknown Error';
      break;
  };
  alert(msg);
  console.log('Error: ' + msg);
}   
function onInitFs(fs) {
alert("1111");
  fs.root.getFile('/tmp/log.txt', {create: true, exclusive: true}, function(fileEntry) {
  alert("222");
    // fileEntry.isFile === true
    // fileEntry.name == 'log.txt'
    // fileEntry.fullPath == '/log.txt'

  }, errorHandler);

}

window.requestFileSystem(window.TEMPORARY, 1024*1024, onInitFs, errorHandler);}
4

1 回答 1

0

从您的代码中不清楚/tmp/log.txt是您的 Linux 机器上的绝对路径,还是来自 HTML5 存储区域的相对路径,所以我只是提醒您HTML5 规范说:

该规范定义了一个用于导航文件系统层次结构的 API,并定义了一种方式,用户代理可以通过该方式将用户本地文件系统的沙盒部分暴露给 Web 应用程序。

所以你不能在磁盘上的任何地方写你的文件。

关于您的问题,您只需/temp要先创建目录:

function onInitFs(fs) 
{
  fs.root.getDirectory('/tmp', {create: true}, function() {}, errorHandler);
  fs.root.getFile('/tmp/log.txt', {create: true}, function() {}, errorHandler);
}
于 2013-10-03T20:33:19.030 回答