Javascript Chrome onMessage.addListener只是偶尔执行

Javascript Chrome onMessage.addListener只是偶尔执行,javascript,jquery,google-chrome,google-chrome-extension,Javascript,Jquery,Google Chrome,Google Chrome Extension,我有一个关于chrome扩展中javascript的小问题。我的弹出窗口包括从一个大站点搜索书籍的小表单。 因此,当我搜索图书名称时,它应该显示加载微调器,向图书API发送xhr请求,删除微调器,在新选项卡中打开options.html并显示结果。它是有效的,但只是有时。 那你有什么建议 popup.js // var books includes JSON array of fetched books hrome.tabs.create({url: "options.html"}, f

我有一个关于chrome扩展中javascript的小问题。我的弹出窗口包括从一个大站点搜索书籍的小表单。 因此,当我搜索图书名称时,它应该显示加载微调器,向图书API发送xhr请求,删除微调器,在新选项卡中打开options.html并显示结果。它是有效的,但只是有时。 那你有什么建议

popup.js

// var books includes JSON array of fetched books
    hrome.tabs.create({url: "options.html"}, function(tab){
      chrome.tabs.sendMessage(tab.id, {booksList: books});
    });
localStorage.books = JSON.stringify(books);
chrome.tabs.create({
    url: "options.html"
}, function(tab) {
    console.log(books);
});​
和options.js

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
 alert("OK");
});
var books = localStorage.books;
drawBooks(JSON.parse(books));

但OK只是有时才显示…为什么?

通过使用localStorage解决

popup.js

// var books includes JSON array of fetched books
    hrome.tabs.create({url: "options.html"}, function(tab){
      chrome.tabs.sendMessage(tab.id, {booksList: books});
    });
localStorage.books = JSON.stringify(books);
chrome.tabs.create({
    url: "options.html"
}, function(tab) {
    console.log(books);
});​
options.js

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
 alert("OK");
});
var books = localStorage.books;
drawBooks(JSON.parse(books));

我相信多姆雷迪有时跑得太晚了。将
chrome.extension.onRequest
移动到
$().ready
之外,或者使用查询字符串或URL片段将数据从弹出窗口传递到选项页面。这种方法的一个优点是,用户还可以通过修改URL和/或为查询添加书签来更改查询。将侦听器移到ready函数之外确实是个好主意,但我想同时使用DOM进行操作。那么怎么做呢?您可以将事件侦听器中的逻辑移动到另一个函数,然后使用布尔标志和domready事件在正确的时间调用该函数。你考虑过我的其他建议了吗?不,因为我更改了代码-它加载书籍的json数组,然后打开带有参数(json数组)的options.html。我仍然有时间上的问题。显示更新的代码,如果相关的话。我建议你要么根据你自己的解决方案,要么一起删除这个问题。