我正在开发一个小的浏览器扩展程序(当前使用WebExtensions API定位于Firefox。第一步是在添加新书签时将其从网址中删除?utm_source =...。)。
function bookmarkCreated(id, bookmarkInfo) {
console.log(`Bookmark ID: ${id}`);
console.log(`Bookmark URL: ${bookmarkInfo.url}`);
currentURL = bookmarkInfo.url;
var strippedURL = currentURL.replace(/\?utm_source=.*/, "");
var newURL = browser.bookmarks.update(id, {
url: strippedURL
});
}
现在,我正在努力添加功能,以遍历所有现有书签并将其剥离?utm_source =...。这不起作用。
我使用了一些example code from MDN来遍历书签,并将值输出到控制台。这段代码可以正常工作:
function makeIndent(indentLength) {
return ".".repeat(indentLength);
}
function logItems(bookmarkItem, indent) {
if (bookmarkItem.url) {
console.log(makeIndent(indent) + bookmarkItem.url);
} else {
console.log(makeIndent(indent) + "Folder");
indent++;
}
if (bookmarkItem.children) {
for (child of bookmarkItem.children) {
logItems(child, indent);
}
}
indent--;
}
function logTree(bookmarkItems) {
logItems(bookmarkItems[0], 0);
}
function onRejected(error) {
console.log(`An error: ${error}`);
}
var gettingTree = browser.bookmarks.getTree();
gettingTree.then(logTree, onRejected);`
我在上面的logItems中添加了对bookmarkCreated(上面的第一个片段)的调用-认为这应该更新URL。似乎可以很好地完成bookmarkItem.id,但是将bookmarkItem.url设为未定义。
if (bookmarkItem.url) {
console.log(makeIndent(indent) + bookmarkItem.url);
bookmarkCreated(bookmarkItem.id, bookmarkItem.url);
} else {
console.log(makeIndent(indent) + "Folder");
indent++;
}
最佳答案
您期望将书签项作为第二个参数,但是有URL代替。
更改已创建书签的签名或将第二个参数更改为bookmarkItem。