0

私は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 が実行されると、子のない最初のブランチまでしか進みません。兄弟ブランチまたは親の兄弟は処理されません。コンソールには、そのブランチのフォルダー名と、その中のすべてのブックマークが表示されます。

スコープの問題は再帰関数の問題の原因のようですが、関数を変数にするなどのことを試しました (それが何をするのかはよくわかりません)、変数を追加してブックマーク配列を各反復内に格納します機能し、違いはありませんでした。

指定したフォルダが見つかったときに子ブックマークの配列を返すにはどうすればよいですか?

4

1 に答える 1