#javascript #firefox #cookies #firefox-addon
#javascript #firefox #файлы cookie #firefox-дополнение
Вопрос:
Я пишу расширение 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
файл.
Что я делаю не так?
Комментарии:
1. Какое значение
document.cookie
должно быть string . Если он пустой, ничего не будет записано. Я также советую вам использоватьOS.File
иwriteAtomic
посмотреть здесь developer.mozilla.org/en-US/docs/JavaScript_OS.File /…2. @Noitidart Спасибо за ваш совет. Я тоже пробовал
writeAtomic
, но думаю, что буду использоватьnsICookieService
, как упоминалось @nmaier . Мне кажется, это лучшее решение.3.
nsICookieService
однако запись в файл не выполняется. После использования этой службы файлов cookie вам все равно придется решить, как записать его в file, либо используя ваш метод выше (в теме сообщения), либо повторно рекомендованный разработчиками moz способ использования OS.File. Но ваш выбор, просто поделитесь, что это не только моя рекомендация.4. @Noitidart Спасибо за хорошее замечание. Это сэкономит мне много времени!
Ответ №1:
Нет document
и, следовательно, нет document.cookie
in main.js
.
- Либо прикрепите сценарий содержимого через
tabs.activeTab.attach
или аналогичныйpage-mod
и передайтеdocument.cookie
значение из этого сценария содержимого вашемуmain.js
, чтобы записать его в файл. - Или используйте
nsICookieService
напрямую каким-либо образом.