如果这很简陋,我道歉,但是广泛的谷歌和通过StackOverflow问题的拖延让我得到了解决方法,但没有答案。我确信答案就在那里,我只是不知道那里那里。
我一直在尝试制作一个可以移动书签的简单Chrome扩展程序。有几点我想让for循环运行直到现有对象的长度。
这是我的意思的片段。如果我的JavaScript伤害眼睛,请原谅我:
var book = {title:[], id:[], url:[], parentId:[], children:[], index:[]};
function getHier(id) {
obj = book.title.length;
chrome.bookmarks.getChildren(id, function (children) {
children.forEach(function (bookmark) {
book.title[obj] = bookmark.title;
book.id[obj] = bookmark.id;
book.url[obj] = bookmark.url;
book.parentId[obj] = bookmark.parentId;
book.children[obj] = bookmark.children;
book.index[obj] = bookmark.index;
obj += 1;
});
});
};
getHier('0');
getHier('1');
此时,我想做这样的事情:
for(var i = 0, len = book.url.length; i <= len; i++){
//DO SOMETHING
}
问题是,它没有像我预期的那样通过for循环运行。但是,如果我使其成为一个功能,并在控制台中调用 AFTER 我已经加载了我的扩展程序,那么效果很好。或者,如果我使用book.url.length
的整数,代码将按照我的预期执行。
作为旁注,我的剧本正文中也有document.addEventListener('DOMContentLoaded', function() {})
。虽然我不认为这是问题的一部分(我已经评论过,问题仍然存在),但我认为值得一提。
我的问题是,我的变量/对象在什么时候被定义?显然当我尝试在我的for循环中引用它时,book.url.length
没有被定义。那么何时可以“返回”到值我刚刚设置?
更新1:
如果我将循环放入函数中,并在click
内的document.addEventListener('DOMContentLoaded', function() {})
事件上调用该函数,则该函数按预期执行我的循环。我假设这与调用控制台中的函数相同,因为在我可以单击任何按钮之前加载脚本;但这真的不是我想要发生的事情。我将继续更新,因为我在这方面骇人听闻,这可能是微不足道的问题。