【发布时间】:2014-06-20 02:08:46
【问题描述】:
我正在编写一个 Firefox 扩展,它应该从当前访问的网页中获取所有 cookie 名称并将名称写入文本文件。到目前为止,我在 javascript 中有以下代码:
var widgets = require("sdk/widget");
var tabs = require("sdk/tabs");
var widget = widgets.Widget({
id: "mozilla-link",
label: "Main Menu",
contentURL: require("sdk/self").data.url("icon-16.png"),
onClick: function() {
const {Cc,Ci} = require("chrome");
var f = '/home/user4/Desktop/my-addon/exported.txt';
var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
file.initWithPath(f);
if(file.exists() == false) //check to see if file exists
{
file.create( Ci.nsIFile.NORMAL_FILE_TYPE, 420);
}
var foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
foStream.init(file, 0x02 | 0x08 | 0x20, 0666, 0);
var converter = Cc["@mozilla.org/intl/converter-output-stream;1"].createInstance(Ci.nsIConverterOutputStream);
converter.init(foStream,"UTF-8", 0, 0);
converter.writeString('Some test string.');
converter.close(); // this closes foStream
}
});
它成功创建了exported.txt 文件并将"Some test string." 字符串写入其中。但是,当我尝试
var x = document.cookie;
获取cookie然后
converter.writeString(x);
在文本文件中写入名称,没有任何反应。在这种情况下,扩展甚至不会创建一个空的 .txt 文件。
我做错了什么?
【问题讨论】:
-
document.cookie的值是什么,应该是字符串。如果它是空的,什么都不会写。我还建议您使用OS.File和writeAtomic参见此处developer.mozilla.org/en-US/docs/JavaScript_OS.File/… -
@Noitidart 谢谢你的建议。我也尝试过
writeAtomic,但我想我会使用@nmaier 提到的nsICookieService。这对我来说似乎是最好的解决方案。 -
nsICookieService不会写入文件。使用该 cookie 服务后,您仍然必须决定如何将其写入文件,或者使用上面的方法(在主题帖子中)或 moz 开发人员推荐的使用 OS.File 的方式。但你的选择,只是分享它不仅仅是我的推荐。 -
@Noitidart 谢谢你的好点。它会为我节省很多时间!
标签: javascript firefox cookies firefox-addon