从chrome扩展名写入文件

时间:2013-10-03 16:18:21

标签: html5 google-chrome google-chrome-extension html5-filesystem

我需要写一个来自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);}

1 个答案:

答案 0 :(得分:0)

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

  

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

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

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

function onInitFs(fs) 
{
  fs.root.getDirectory('/tmp', {create: true}, function() {}, errorHandler);
  fs.root.getFile('/tmp/log.txt', {create: true}, function() {}, errorHandler);
}