8

Chrome 拡張機能でより優れたブックマーク マネージャーを作成しようとしています。問題は、bookmarksAPIを実際に使用する方法に関する簡単な例 (私が見つけることができる) がないことです。

私はサンプルソースを見てきました(私がd/ledして自分のコンピュータにインストールしたとき、検索ボックスを提供する以外は何もしませんでした。入力/入力してリターンを押すことは何もできませんでした) .

私の最終的な目標は、どこかのサービスでアカウントにサインアップしなくても、ページを保存して後で読むことができる拡張機能を作成することです。そのため、ルート フォルダー/その他のブックマークに 1 つまたは 2 つのブックマーク フォルダーを作成する予定です。少なくとも、「未読ページ」フォルダーを作成します。そのフォルダーに、未読のブックマークを作成します。ユーザーがアイテムを既読としてマークすると、そのアイテムはそのフォルダーから削除されます。

それが私がやろうとしていることです...良い例を私に示しているだけであっても、どんな助けも大歓迎です。

アップデート:

...<script>
function display(tree){
   document.getElementById("Output").innerHTML = tree;
}
function start(){
   chrome.bookmarks.getTree(display);
}
</script>
</head>
<body>
<h4 id="Output"></h4>
<script>
 start();
</script>
...

これは[object Object]、(少なくとも JavaScript の経験が限られている私には) オブジェクトが存在することを示しています。しかし、そのオブジェクトのメンバーにアクセスする方法は?

に変更treeするtree.idか、パラメータと思われるものを変更すると、 が表示されますundefined

4

3 に答える 3

11

現在、ブックマーク API で「その他のブックマーク」や「ブックマーク バー」などのフォルダを見つける良い方法はありません。すべてのブックマークを反復処理し、それらのルート フォルダーを持つノードを見つけて、そのブックマーク ID を保存する必要があります。バグはIssue 21330に登録されています。

ルート ID は常に 0 で、0 という意味では「ブックマーク バー」と「その他のブックマーク」に対応します。ツリー構造と同様に、各ノードには子があります。1 つのフォルダーの下にあるすべてのブックマークをフェッチする場合は、getChildren API を使用して、すべてのノードを再帰的に取得できます (反復的に行うこともできます)。たとえば、次の例ではすべてのブックマークが取得されます。

printBookmarks('0');

function printBookmarks(id) {
 chrome.bookmarks.getChildren(id, function(children) {
    children.forEach(function(bookmark) { 
      console.debug(bookmark.title);
      printBookmarks(bookmark.id);
    });
 });
}

では、なぜ反復ごとに API を呼び出さなければならないのでしょうか? ツリー全体を取得するための API です。試してみると、getTree のすべてのノードに子のリストがあることがわかります。パーフェクトです:

chrome.bookmarks.getTree(function(bookmarks) {
  printBookmarks(bookmarks);
});

function printBookmarks(bookmarks) {
  bookmarks.forEach(function(bookmark) {
    console.debug(bookmark.id + ' - ' + bookmark.title + ' - ' + bookmark.url);
    if (bookmark.children)
      printBookmark(bookmark.children);
  });
}

これですべてです。これをすべて反復的に行うと、パフォーマンスが向上しますが、それを理解することができます:) ブックマークバーをやり直したいので、拡張機能でそのページをオーバーライドできることに注意してください (すぐに): http:/ /code.google.com/chrome/extensions/override.html

ブックマークの素敵な HTML ツリーを表示したい場合は、上で示した getTree 機能を拡張して親 DOM を受け入れることで、簡単に表示できます。このようなことができます。getTree を使用するようにコードを編集するか、すべてを折りたたんで getChildren を使用し、要求があればさらにブックマークをフェッチします。

于 2010-05-11T23:10:25.760 に答える
2

ブックマークはツリーで編成され、ツリー内の各ノードはブックマークまたはグループ (ノードを含むことができるフォルダー) のいずれかです。ツリー内の各ノードは、BookmarkTreeNode オブジェクトによって表されます。

ファイル システム オブジェクトという意味でのルート ブックマーク フォルダはありません。すべてのブックマークは、指定したリンクの API を介してアクセスする構造化ファイルに保存されます。ツリーのルートは getTree によって返されます。

chrome.bookmarks.getTree
于 2010-05-11T17:05:53.027 に答える
1

さて、私は私が欲しいものにアクセスする方法を発見しました。振り返ってみると、もっと早く見たはずです。

http://code.google.com/chrome/extensions/tut_debugging.html

デバッガーを使用して、ブレークポイントを設定し、オブジェクトを表示することができました。[オブジェクトオブジェクト]は長さ1の配列です。

私の例で与えられた関数を使用すると、tree[0].childrenは子を含む配列です。私のデフォルトのセットアップツリーには2つの子があり、tree [0] .children [0]は「ブックマークバー」で、tree [0].children[1]は「その他のブックマーク」です。ブックマークツリーの残りの部分はそこから流れていきますが、「その他のブックマーク」(tree [0] .children [1])は私が探しているフォルダーです。

于 2010-05-11T22:33:14.960 に答える