私はChrome拡張機能を書いているJavascriptの初心者です。特定のフォルダー内のブックマークの配列を取得したい。フォルダーとブックマークのツリーをクロールするコードをいくつかコピーしましたが、フォルダーのコンテンツを返すように変更すると、ツリーの一部しかクロールされません。
Chrome ブックマーク API を使用します。各ノードには、タイトル、URL、および子ノードの配列があります。 http://developer.chrome.com/extensions/bookmarks.html#type-BookmarkTreeNode
function findFolder(bookmarkNodes, folderName) {
for(var i=0;i<bookmarkNodes.length;i++) {
console.log(bookmarkNodes[i].title, bookmarkNodes[i].url ?
bookmarkNodes[i].url : "[Folder]");
/* (A) this crawls the whole tree successfully
if(bookmarkTreeNodes[i].children) {
traverseBookmarks(bookmarkTreeNodes[i].children);
}
*/
// (B) this stops at the first terminal branch
if(bookmarkNodes[i].children) {
if (bookmarkNodes[i].title == folderName) {
return bookmarkNodes[i].children;
}
return findFolder(bookmarkNodes[i].children);
}
}
}
コメント化されたコード (A) を実行すると、コンソール出力にすべてのフォルダーとブックマークが表示されます。コード B が実行されると、子のない最初のブランチまでしか進みません。兄弟ブランチまたは親の兄弟は処理されません。コンソールには、そのブランチのフォルダー名と、その中のすべてのブックマークが表示されます。
スコープの問題は再帰関数の問題の原因のようですが、関数を変数にするなどのことを試しました (それが何をするのかはよくわかりません)、変数を追加してブックマーク配列を各反復内に格納します機能し、違いはありませんでした。
指定したフォルダが見つかったときに子ブックマークの配列を返すにはどうすればよいですか?