Расширение Firefox: записать имена файлов cookie для текущей веб-страницы в локальный файл .txt

#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 напрямую каким-либо образом.