首页 > 解决方案 > 为什么在 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++;
}

标签: javascriptfirefoxbrowserfirefox-addon-webextensions

解决方案


您期望将 bookmarkItem 作为您的第二个参数,但是有 url。更改bookmarkCreated 的签名或将第二个参数更改为bookmarkItem。


推荐阅读