2012-08-08 23 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