2012-08-08 69 views
1

我有一个关于在我的Chrome扩展中的JavaScript的小问题。我的弹出窗口包含用于从一个大网站搜索书籍的小表单。 所以当我搜索书名时,它应该显示加载微调,发送xhr请求到图书API,删除微调,在新标签中打开options.html并显示结果。它的工作原理,但只是有时。 那么你有什么建议?铬onMessage.addListener有时只执行

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}); 
    }); 

而且options.js

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) { 
alert("OK"); 
}); 

,但确定只显示有时...为什么?

+0

我相信domready中有时运行为时已晚。将'chrome.extension.onRequest'移动到'$()。ready'外部,或使用查询字符串或URL片段将数据从弹出窗口传递到选项页面。这种方法的一个优点是用户也能够通过修改URL和/或书签查询来改变查询。 – 2012-08-08 12:53:12

+0

在ready函数外部移动监听器是个好主意,但我想同时使用DOM进行操作。那么该怎么做呢? – Droidik 2012-08-08 13:16:54

+0

您可以将事件侦听器中的逻辑移动到另一个函数,然后使用布尔标志和domready事件在正确的时间调用该函数。你有没有考虑过我的其他建议?这看起来更贴心我。 – 2012-08-08 14:23:15

回答

0

通过使用本地存储解决...

popup.js

localStorage.books = JSON.stringify(books); 
chrome.tabs.create({ 
    url: "options.html" 
}, function(tab) { 
    console.log(books); 
});​ 

options.js

var books = localStorage.books; 
drawBooks(JSON.parse(books)); 
+1

我建议你要么精心制定自己的解决方案,要么全部删除问题。 – Faust 2012-08-09 09:50:41