Полезная информация

Общайтесь со знакомыми и друзьями в нашем сообществе в Facebook.

№130-01-2012 11:57:22

crackpot
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 2
UA: Firefox 9.0

Работа с закладками

Для реализации своих коварных целей потребовалось выгрузить дерево закладок из FF для начала в файл.
Смотрел MDN и гугл, понял как-то не очень много. Вопросы такие:

1. Есть код. Код, по идее, должен писать содержимое папки "Неподшитые закладки" в файл. Но вместо этого он пишет в файл "Child: 6". Непонятно.

Выделить код

Код:

function testMe()
{
var historyService = Components.classes["@mozilla.org/browser/nav-history-service;1"]
                               .getService(Components.interfaces.nsINavHistoryService);
var options = historyService.getNewQueryOptions();
var query = historyService.getNewQuery();

var bookmarksService = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
                                 .getService(Components.interfaces.nsINavBookmarksService);
var toolbarFolder = bookmarksService.unfiledBookmarksFolder;

query.setFolders([toolbarFolder], 1);

var result = historyService.executeQuery(query, options);
var rootNode = result.root;
rootNode.containerOpen = true;

//create proper path for xml file
var theFile = "C:\\Users\\Insane\\Documents\\Dropbox\\Dev\\sync-sync\\FF\\8ukmuart.ffRSDev\\extensions\\helloworld@ru.wikiversity.org\\content\\list.txt";
//create component for file writing
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath( theFile );
if(file.exists() == false) //check to see if file exists
{
alert("creating file...");
file.create( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420);
}

//create file output stream and use write/create/truncate mode
//0x02 writing, 0x08 create file, 0x20 truncate length if exist
var stream = Components.classes["@mozilla.org/network/file-output-stream;1"]
.createInstance(Components.interfaces.nsIFileOutputStream);

stream.init(file, 0x02 | 0x08 | 0x20, 0666, 0);


// iterate over the immediate children of this folder and dump to console
for (var i = 0; i < rootNode.childCount; i ++) {
  var node = rootNode.getChild(i);
//  dump("Child: " + node.title + "\n");
    var content = "Child: " + node.type + "\n";
    stream.write(content, content.length);
 
}
stream.close();
alert("1");

// close a container after using it!
rootNode.containerOpen = false;
}

2. Посоветуйте какое-нибудь расширение для FF, в которое можно было бы вставить кусок кода на JS (например тот, что выше) и запустить на выполнение. Передергивать FF после каждого редактирования как-то надоело.

3. В неподшитых закладках у меня приличное количество папок, чего не хватает коду, чтобы отобразить дерево?

Выделить код

Код:

FolderName
+ItemName
+ItemName
+FolderName
++ItemName
++ItemName
+ItemName

Отсутствует

 

№230-01-2012 18:07:25

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Aurora 11.0

Re: Работа с закладками

crackpot пишет

Но вместо этого он пишет в файл "Child: 6". Непонятно.

crackpot пишет

    var content = "Child: " + node

.type

+ "\n";
    stream.write(content, content.length);

nsINavHistoryResultNode - MDN:

type
unsigned long
Identifies the type of node. You can use QueryInterface to access the corresponding specialized result node interface. Read only.

- все в соответствии.

crackpot пишет

Передергивать FF после каждого редактирования как-то надоело.

1. Сделайте расширение с диалогом, в диалоге располагайте свои скрипты. Не забудьте про настройки nglayout.debug.disable_xul_cache и nglayout.debug.disable_xul_fastload. Подробности здесь: https://developer.mozilla.org/en/Settin … references.
2. Выставьте devtools.chrome.enabled = true, и запускайте скрипты в Scratchpad.

okkamas_knife пишет

и возможно Scriptish

Нет. User scripts не имеют доступа к chrome context.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]