1

我想同步遍历书签树,但像这样递归遍历树:

function traverseBookmarks(bookmarkTreeNodes) {
for(var i=0;i<bookmarkTreeNodes.length;i++) {
    if(bookmarkTreeNodes[i].children) {
        traverseBookmarks(bookmarkTreeNodes[i].children);
    } 

   }
}

但是当我打印出bookmarkTreeNodes[i]使用它的属性时:

function objToString(obj){
  var a = '';
  for(var p in obj){
    a += p + ' : ' + obj[p] + ' \n';
    }
  return a;
 }

我明白了:

dateAdded : 1369804994102 
dateGroupModified : 1369805295054 
id : 2240 
index : 9 
parentId : 1 
title : Diet 

没有children像 API 所说的那样应该有的属性。没有children同步的方式来遍历书签树。目前,我必须使用每个文件夹节点的 id,然后使用异步函数chrome.bookmarks.getChildren()来检索导致各种其他问题的子节点,例如在异步调用完成之前执行后续代码。

4

1 回答 1

1

不,您的代码中存在错误。为了让自己满意,情况就是这样:

  1. 检查您的弹出窗口或打开加载扩展程序的页面,然后将检查器中的页面上下文切换到您的扩展程序。
  2. 切换到控制台。
  3. 类型chrome.bookmarks.getTree(function(r){console.log(r);});
  4. 展开被记录的对象。只要您确实有书签层次结构,您就会看到带有子对象的对象,正如所承诺的那样。

你没有说你是如何检索bookmarkTreeNodes的,所以不可能从你的问题中看出错误在哪里。如果您将类似的 console.log 放在回调函数的顶部并看到不同的结果,那么您将把错误范围缩小到您得到的bookmarkTreeNodes.

于 2013-05-30T02:38:46.430 回答