我有一些不寻常的情况,涉及 chrome 中的一些 179586 书签。其中大部分是重复的,我需要删除它们。
显然,这个过程需要使用脚本自动化。
Chrome 的书签 API 对允许的操作操作率实施了严格的配额,因此我必须首先将数据导出为更有利于离线操作的格式。
chrome.bookmarks.getTree(function(t){tree = t[0]});
将整个存储库存储在全局变量下tree
,BookmarkTreeNode
格式为.
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
. 当我检查ALL
和stack
时,它们似乎都是长度为 17388 stack
的数组。仅由空字符串组成,而ALL
仅由仅由空字符串组成的数组组成。
有人对如何解决这个问题有任何提示吗?也许 Node.js 是比 Chrome 开发控制台更适合处理阶段的环境,我现在应该只专注于从那里获取 JSON 吗?
也许 Node 有更灵活和可配置的调用堆栈限制和其他此类参数?
感谢您的任何想法!:)