问题是,简单地说:
如何利用JSON API获得整个树的JSON,无论以任何方式都没有更改,这样我就可以发送到其他地方了?
这是一个边缘扩展,因为它的价值。
这篇文章的其余部分是背景,所以你可以看到,我不只是把它从零开始扔出去。希望它能帮你看清我从哪里来。
从它自己的角度来看,我找不到很多方法来让它返回JSON树就像它说的
chrome.bookmarks.getTree()尝试这样的尝试(或下面列出的任何其他尝试).:
chrome.bookmarks.getTree(
function(){return chrome.bookmarks.BookmarkTreeNode[0];}
)..。结果“无法读取未定义的属性(读取'0')”。
我正在编写一个扩展代码(我还在学习javascript),我只是无法理解chrome.bookmarks API。
扩展没有html,这是清单:
{
"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实现这一点。下面的代码(忽略任何多余的)可以在加载时简单地发送命令:
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),它不会给出结果,也不会触发请求。chrome.bookmarks.getChildren()可以自己使用“0”来表示树的根,也可以不使用任何东西。同样的错误。chrome.bookmarks.getSubTree(0) (或任何数字)将导致“无匹配签名”和“匿名函数”错误。这要么是它自己的,要么是在一个getTree中。如果有人知道我需要在这里使用哪个命令来发送完整的JSON树(从我通过getTree获得的文档中),那么我将永远感激您所能提供的任何帮助。我假设这是以承诺为中心的,但就我所能看到的而言,它们真的很难发挥作用。
如果能尽量简单的话,那就太好了。我看不出有多复杂,注意。
不期待任何回应,但如果你可以的话,那就太好了。
还研究了:
编辑-进步-一些进步,使用Mozilla/FireFox文档中的代码,至少已经得到控制台显示的全部书签,这是远远超过到目前为止已经实现。
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放在获取的主体中,它不会触发获取。
发布于 2022-05-31 22:50:47
好的,我已经找到了使用Mozilla/FireFox代码 (我将把链接编辑到问题中)来移动它来完成这个任务的答案。
Mozilla是我能理解的唯一一页,它给我的承诺处理带来了一些意义。
因此,使用他们的例子,我得到了Edge书签数组,使用如下:
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树的问题。
https://stackoverflow.com/questions/72454215
复制相似问题