ツリーの任意の時点でルート フォルダーからすべてのユーザーのブックマーク フォルダーの配列を返すことができるようにしたいと考えています。
これは、RESULT_TYPE_FOLDER を何も返さない最も近いものです。
function find_folders()
{
var history = Cc["@mozilla.org/browser/nav-history-service;1"]
.getService(Ci.nsINavHistoryService);
var query = history.getNewQuery();
var options = history.getNewQueryOptions();
// Query users bookmarks, not history
options.queryType = options.QUERY_TYPE_BOOKMARKS;
// Execute the search and store results
var result = history.executeQuery(query, options);
// Open the root containerNode and open it
var resultContainerNode = result.root;
// OPEN resultContainerNode
resultContainerNode.containerOpen = true;
var folders = [];
// Search results are now child items of this container?
for (var i=0; i < resultContainerNode.childCount; ++i) {
var childNode = resultContainerNode.getChild(i);
if(childNode.type === childNode.RESULT_TYPE_FOLDER)
{
folders.push(childNode);
}
}
// CLOSE resultContainerNode
resultContainerNode.containerOpen = false;
return folders;
};
find_folders();
この結果の種類のチェックを削除すると、多くの URI といくつかの RESULT_TYPE_QUERY が得られますが、RESULT_TYPE_FOLDER は得られません。
childNode.type: 0
childNode.type: RESULT_TYPE_QUERY
childNode.title: Most Visited
childNode.type: 0
childNode.type: 0
childNode.type: 0
childNode.type: 0
childNode.type: 0
childNode.type: 0
childNode.type: 0
childNode.type: 0
childNode.type: 0
childNode.type: 0
childNode.type: RESULT_TYPE_QUERY
childNode.title: History
ここのドキュメント: https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsINavHistoryQueryOptions#Query_type_constants は、設定できることを示唆しています:
excludeItems boolean このオプションは、すべての URI とセパレーターをブックマーク クエリから除外します。これは、ブックマーク フォルダとクエリのリスト (場所ページの左ペインなど) だけが必要な場合に使用されます。履歴に対するクエリでは無視されます。デフォルトは false です。
ただし、これを設定すると、クエリは結果を返しません。
function find_folders()
{
var history = Cc["@mozilla.org/browser/nav-history-service;1"]
.getService(Ci.nsINavHistoryService);
var query = history.getNewQuery();
var options = history.getNewQueryOptions();
options.queryType = options.QUERY_TYPE_BOOKMARKS;
options.excludeItems = true; // Exclude everything that isn't a folder?
// Execute the search and store results
var result = history.executeQuery(query, options);
// Open the root containerNode and open it
var resultContainerNode = result.root;
// OPEN resultContainerNode
resultContainerNode.containerOpen = true;
var folders = [];
// Search results are now child items of this container?
for (var i=0; i < resultContainerNode.childCount; ++i) {
var childNode = resultContainerNode.getChild(i);
folders.push(childNode);
}
// CLOSE resultContainerNode
resultContainerNode.containerOpen = false;
return folders;
};
find_folders(); // Returns nothing :C