Chrome扩展-书签2返回为未定义



我正在创建一个chrome扩展,允许导航到用户的前四个书签使用ctrl+shift+数字;一切都很顺利,第1、3和4个书签都能正常工作,但第2个书签似乎每次都返回未定义的结果。我有一种感觉,这是由于我导航书签树的方式,是从chrome api,但我不确定在哪里或如何我可以解决这个问题。另一种想法是,这个函数必须异步解决,但我不确定为什么会这样,或者为什么它会与其他书签一起工作,如果是这样的话。

这是我的js文件

const bookmarks = [];
chrome.tabs.onCreated.addListener(function(tab) { //refresh bookmarks on new tab opening
var bookmarkTreeNodes = chrome.bookmarks.getTree(
function(bookmarkTreeNodes){
bookmarksArray(bookmarkTreeNodes)
})
})
chrome.commands.onCommand.addListener(function(command){ 
var bookmarkTreeNodes = chrome.bookmarks.getTree( //also check bookmarks on command execution
function(bookmarkTreeNodes){
bookmarksArray(bookmarkTreeNodes)
})
printArray(); //temp
console.log('command:',command.charAt(8)); //tab number temp 
tabSelected = command.charAt(8);
chrome.tabs.update({
url: ("" + bookmarks[tabSelected-1])
})    
});
function printArray(){
for(var i = 0; i<bookmarks.length; i++){
console.log(bookmarks[i]);
}
}

function bookmarksArray(bookmarkTree){
for(var i=0; i<bookmarkTree.length; i++){
bookmarks[i] = ("" + bookmarkTree[i].url); //url is insert to each spot as string 
console.log("" + bookmarks[i])
if(bookmarkTree[i].children){
bookmarksArray(bookmarkTree[i].children)
}
}
}

在对bookmarksArray()的递归调用中重写了bookmarks的相同元素,因为每个循环从0开始。使用push()来追加数组,而不是像bookmarkTree那样写入相同的索引。

function bookmarksArray(bookmarkTree) {
for (var i = 0; i < bookmarkTree.length; i++) {
bookmarks.push(String(bookmarkTree[i].url));
console.log(bookmarks[i])
if (bookmarkTree[i].children) {
bookmarksArray(bookmarkTree[i].children)
}
}
}

最新更新