1

我有一些不寻常的情况,涉及 chrome 中的一些 179586 书签。其中大部分是重复的,我需要删除它们。

显然,这个过程需要使用脚本自动化。

Chrome 的书签 API 对允许的操作操作率实施了严格的配额,因此我必须首先将数据导出为更有利于离线操作的格式。

chrome.bookmarks.getTree(function(t){tree = t[0]});

将整个存储库存储在全局变量下treeBookmarkTreeNode格式为.

JSON.stringify(tree).length;

表明该对象(至少使用 JSON 编码)是42777359字节长的。

JSON.stringify(tree).match(/"url"/g).length

显示总共有179586书签。

所以,为了展平整个事情:

var ALL = [], stack = [];
function processTree(tree) {
  if(!(!tree.url != !tree.children)) throw tree;

  var entry = (tree.url ? [tree.url, tree.title] : ["FOLDER", tree.title]).concat(stack);
  entry.dateAdded = tree.dateAdded;

  ALL.push(entry);

  if(tree.children) {
    stack.unshift(tree.title);
    tree.children.forEach(processTree);
    stack.shift();
  }

  return 'done.';
}

不幸的是,我不仅没有得到预期的结果,而且还得到:Uncaught RangeError: Maximum call stack size exceeded. 当我检查ALLstack时,它们似乎都是长度为 17388 stack的数组。仅由空字符串组成,而ALL仅由仅由空字符串组成的数组组成。

有人对如何解决这个问题有任何提示吗?也许 Node.js 是比 Chrome 开发控制台更适合处理阶段的环境,我现在应该只专注于从那里获取 JSON 吗?

也许 Node 有更灵活和可配置的调用堆栈限制和其他此类参数?

感谢您的任何想法!:)

4

0 回答 0