javascript - 为什么在 bookmarkItem.id 工作正常时,bookmarkItem.url 返回未定义?
问题描述
我正在开发一个小型浏览器扩展程序(目前使用 WebExtensions API 针对 Firefox。第一步是在添加新书签时从 url 中删除 ?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=... 这不起作用。
我使用了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++;
}
解决方案
您期望将 bookmarkItem 作为您的第二个参数,但是有 url。更改bookmarkCreated 的签名或将第二个参数更改为bookmarkItem。
推荐阅读
- javascript - Sequelize string 不是函数错误,为什么?
- twilio - 如何使用 Twilio 连接 2 个应用程序用户之间的通话并进行录音?
- django - 如何使用 django 形式的小部件调用 javascript 函数
- python - 如何应用 django 初始迁移?
- ios - 如果在 dealloc 之前没有移除 KVO 观察者,为什么应用程序会崩溃?
- javascript - 从数组中获取具有唯一 ID 的第一个对象并将它们放入新列表中
- mysql - 如何在 hostgator 上上传 nodejs 项目/网站。可能吗?
- multithreading - 如何在 groovy 中使用多线程访问 1000 个端点?
- google-cloud-platform - 扳手 - 如何查找表大小
- google-chrome-extension - 如何从后台脚本更改 BadgeText