bookmarks.getChildren()

bookmarks.getChildren() は、ブックマークフォルダーの ID を BookmarkTreeNode で指定し、その直下にあたる子要素をすべて取得します。

構文

js
browser.bookmarks.getChildren(
  id, // 文字列
  callback, // 関数
);

引数

id

取得したい子要素を持つフォルダー ID を指定する string です。

callback

子ノードのリストが取得された際に実行される関数です。この関数には以下の引数が渡ります。

results

各要素が 1 つの子ノードを表す、bookmarks.BookmarkTreeNodearray です。要素の順序は、UI に表示されているのと同じ順番です。現在、セパレータの有無は結果に含まれません。指定したノードに子要素が含まれていなかった場合、results は空配列となります。

ブラウザーの互換性

BCD tables only load in the browser

使用例

基本的な使い方

js
function gotChildren(children) {
  console.log(children);
}

chrome.bookmarks.getChildren(bookmarkItemId, gotChildren);

指定したフォルダーでブックマークを切替

以下の例は、フォルダーを BookmarkTreeNode で指定し、そのフォルダーに新しいブックマークを作成するものです。ただし、既に同じ名前のブックマークがあった場合は、逆に既存のブックマークを削除することとします。このとき新しいブックマークは作成されません。

js
function toggleBookmark(folderNode, title, url) {
  chrome.bookmarks.getChildren(folderNode.id, function (results) {
    let node = results.find(function (el) {
      return el.title === title;
    });

    // ブックマークが存在する場合は削除する
    // そうでなければ新しく作成する

    if (node !== undefined) {
      chrome.bookmarks.remove(node.id);
    } else {
      chrome.bookmarks.create({
        parentId: folderNode.id,
        title: title,
        url: url,
      });
    }
  });
}

先の toggleBookmark() 関数は、folderNode で指定した BookmarkTreeNode の中に既に存在しているすべてのブックマークのリストを取得するため、最初に bookmarks.getChildren() を呼び出しています。

コールバックに指定された匿名関数には results という引数が 1 つ渡されます。この引数は、フォルダーの直下にある子要素をすべて含んだ配列です。まず初めに、与えられたタイトルを持つノードがフォルダーに存在するかどうかを調べます。ここでは Array.find() メソッドを使い、タイトルが等しいかどうかをコールバック内で判定しています。

マッチするノードがあった場合(すなわち、nodeundefined ではない場合)、指定した title を持つブックマークが既に存在していたことが分かったので、既存のブックマークを削除するために bookmarks.remove() を呼び出します。

そうではなかった場合、新しいブックマークを作成するために bookmarks.create() が呼び出します。この際、引数 folderNode で与えられていたフォルダー ID を新しい親フォルダーの ID に指定し、合わせて titleurl も指定します。

メモ: この API は Chromium の chrome.bookmarks API に基づいています。また、このドキュメントは bookmarks.json における Chromium のコードから作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。