首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让chrome.bookmarks在JSON中提供整个树

如何让chrome.bookmarks在JSON中提供整个树
EN

Stack Overflow用户
提问于 2022-05-31 21:16:12
回答 1查看 184关注 0票数 0

问题是,简单地说:

如何利用JSON API获得整个树的JSON,无论以任何方式都没有更改,这样我就可以发送到其他地方了?

这是一个边缘扩展,因为它的价值。

这篇文章的其余部分是背景,所以你可以看到,我不只是把它从零开始扔出去。希望它能帮你看清我从哪里来。

从它自己的角度来看,我找不到很多方法来让它返回JSON树就像它说的

代码语言:javascript
复制
chrome.bookmarks.getTree()

尝试这样的尝试(或下面列出的任何其他尝试).:

代码语言:javascript
复制
chrome.bookmarks.getTree(
  function(){return chrome.bookmarks.BookmarkTreeNode[0];}
)

..。结果“无法读取未定义的属性(读取'0')”。

我正在编写一个扩展代码(我还在学习javascript),我只是无法理解chrome.bookmarks API。

扩展没有html,这是清单:

代码语言:javascript
复制
{
    "name": "myExtensionyWentiony",
    "description": "This is a test",
    "version": "1.0",
    "manifest_version": 3,
    "background": {
        "service_worker": "script/background.js"
    },
    "permissions": [
        "bookmarks"
    ]
}

我可以使用fetch()以多种方式发送消息,并且可以使用chrome.runtime.onStartup实现这一点。下面的代码(忽略任何多余的)可以在加载时简单地发送命令:

代码语言:javascript
复制
chrome.runtime.onStartup.addListener(
  fetch(
    'WHEREVER_IT_IS_UNIMPORTANT', 
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.parse(JSON.stringify('{"pinky": "punky", "bingo": "malingo"}'))
    }
  )
)

但是,我不能让chrome.bookmarks给我任何有意义的东西,因为我只希望获得整个JSON树,而不仅仅是它的一部分。

我找到的每一个例子都给出了将它转换成这个或那个的方法,而且我还不够聪明,无法根据我的需要来解析它。我只想要完整的JSON树,仅此而已。

我尝试过将所有东西都转换成不同的函数,但这没有任何帮助。为了表明我在这里不仅仅耸耸肩,我一整天都在做这个,在上述函数中,或者仅仅在上面的代码中,据我所记得,我尝试过:

  • ..。使用chrome.bookmarks.getTree(),它要么什么也不给(并且停止发送请求),或者如果我开始把东西放进去,它会产生许多错误,从现在起我记得的主要错误是“匿名函数”.当它不是匿名的时候,有时函数实际上有一个名字。
  • ..。使用chrome.bookmarks.getTree([0])本身会向浏览器返回一个承诺,但是当它试图将数据发送到其他地方时,它什么也不做。
  • . chrome.bookmarks.getTree(tree),它不会给出结果,也不会触发请求。
  • ..。将函数放入getTree中,得到相同的结果,要么没有,要么匿名函数。
  • ..。使用chrome.bookmarks.getChildren()可以自己使用“0”来表示树的根,也可以不使用任何东西。同样的错误。
  • ..。以前在getTree内部进行的尝试,或者在getTree引用的函数中进行的尝试。
  • ..。在使用或引用这些函数时,将getTree或getChildren作为常量、变量和变体。
  • ..。使用chrome.bookmarks.getSubTree(0) (或任何数字)将导致“无匹配签名”和“匿名函数”错误。这要么是它自己的,要么是在一个getTree中。
  • ..。搜索"chrome.bookmarks“”匿名函数“,没有任何用处。

如果有人知道我需要在这里使用哪个命令来发送完整的JSON树(从我通过getTree获得的文档中),那么我将永远感激您所能提供的任何帮助。我假设这是以承诺为中心的,但就我所能看到的而言,它们真的很难发挥作用。

如果能尽量简单的话,那就太好了。我看不出有多复杂,注意。

不期待任何回应,但如果你可以的话,那就太好了。

还研究了:

编辑-进步-一些进步,使用Mozilla/FireFox文档中的代码,至少已经得到控制台显示的全部书签,这是远远超过到目前为止已经实现。

代码语言:javascript
复制
function onFulfilled(bookmarks) {
  console.log(JSON.stringify(bookmarks));
};

function onRejected(error) {
  console.log(`An error: ${error}`);
};

let gettingBookmarks = chrome.bookmarks.getTree([0]);
let binky = gettingBookmarks.then(onFulfilled, onRejected);

但是,如果我将尝试调用binky放在获取的主体中,它不会触发获取。

EN

回答 1

Stack Overflow用户

发布于 2022-05-31 22:50:47

好的,我已经找到了使用Mozilla/FireFox代码 (我将把链接编辑到问题中)来移动它来完成这个任务的答案。

Mozilla是我能理解的唯一一页,它给我的承诺处理带来了一些意义。

因此,使用他们的例子,我得到了Edge书签数组,使用如下:

代码语言:javascript
复制
function onFulfilled(bookmarks) {
  console.log(JSON.stringify(bookmarks));
  fetch(
    'WHEREVER_IT_IS_UNIMPORTANT', 
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(bookmarks)
    }
  )
};

function onRejected(error) {
  console.log(`An error: ${error}`);
};


  let gettingBookmarks = chrome.bookmarks.getTree([0]);
  gettingBookmarks.then(onFulfilled, onRejected);

对于我没有提出关于在chrome.runtime.onStartup上发送这个文件的问题,我感到有点恼火,但我感觉到将它放到那里会容易得多。(但欢迎你的评论!)

实际上,这从技术上回答了如何在其他地方使用完整的JSON树的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72454215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档