Skip to content

Latest commit

 

History

History
112 lines (87 loc) · 5.81 KB

File metadata and controls

112 lines (87 loc) · 5.81 KB
title slug
bookmarks.getChildren()
Mozilla/Add-ons/WebExtensions/API/bookmarks/getChildren

{{AddonSidebar}}

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

構文

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

引数

  • id

    • : 取得したい子要素を持つフォルダー ID を指定する {{jsxref("string")}} です。
  • callback

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

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

ブラウザーの互換性

{{Compat}}

使用例

基本的な使い方

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

chrome.bookmarks.getChildren(bookmarkItemId, gotChildren);

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

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

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 で指定した {{WebExtAPIRef("bookmarks.BookmarkTreeNode", "BookmarkTreeNode")}} の中に既に存在しているすべてのブックマークのリストを取得するため、最初に bookmarks.getChildren() を呼び出しています。

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

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

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

Note

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