Firefox附加组件 - 安装后OS.File.open“访问被拒绝”

时间:2014-10-13 20:41:34

标签: firefox sdk firefox-addon mozilla

日期:2014年10月13日星期一14:22:35 GMT-0500(中央标准时间) 完整消息:在文件log.txt上打开操作期间赢得错误5(访问被拒绝。)

我在Mozilla的附加SDK教程之后创建了一个附加组件,cfx testcfx run都完美无缺。但是,安装附加组件后,OS.File.open不起作用。以下是相关代码:

var testLogArray = "", testLogFile = "qpasslog.txt";
const {TextEncoder, TextDecoder, OS} = Cu.import("resource://gre/modules/osfile.jsm", {});
Cu.import("resource://gre/modules/Task.jsm");
var testLogEncoder = new TextEncoder();
function addToLogfile(logData) {
    console.log("main-js: Logging "+logData);
    var dataToWrite = testLogEncoder.encode(logData+"\r\n");
    Task.spawn(function() {
        let exists = yield OS.File.exists(testLogFile);
        let pfh = yield OS.File.open(testLogFile, exists ? {read:true, write: true, existing: true, append: true} : {read: true, write: true, create: true, append: false });
        let text = yield pfh.read();
        yield pfh.write(dataToWrite);
        yield pfh.close(); 
    });
}
let currentdate = new Date();
let dateTime = currentdate.getDate() + "/"
            + (currentdate.getMonth()+1)  + "/" 
            + currentdate.getFullYear() + " @ "  
            + currentdate.getHours() + ":"  
            + currentdate.getMinutes() + ":" 
            + currentdate.getSeconds();
addToLogfile("\r\nLog for "+dateTime);

然后我在我的程序中多次调用addToLogfile,例如。

addToLogfile("main-js: Simple storage is over quota. Removing "+ss.storage.emails.pop());

这一切都在cfx run期间完美运作。它会记录日期/时间,然后记录其他消息。但是现在我用cfx xpi和ctrl + o(xpi文件)安装了程序,并且:

  1. 在我关闭Firefox
  2. 之前,我没有收到任何已记录的消息
  3. 当我关闭Firefox时,我会收到日期/时间消息,例如。

    Log for 13/10/2014 @ 13:3:28
    
  4. 我没有收到任何其他消息,即使代码应该始终执行。

  5. 浏览器控制台显示以下消息:

    Date: Mon Oct 13 2014 14:25:46 GMT-0500 (Central Standard Time)
    Full Message: Win error 5 during operation open on file qpasslog.txt (Access is denied.)
    
  6. 那么为什么有时会出现拒绝访问错误?如何在不收到错误的情况下写入文件?

1 个答案:

答案 0 :(得分:1)

由于没有正确的日志文件路径。以下链接中的答案修复了它。 Mozilla Add-on SDK - OS.File.read (The system cannot find the file specified.)