2016-02-04 36 views
0

我正在製作一個Chrome擴展程序,該擴展程序可從API抽取大量數據並使用它來修改頁面上的內容。由於數據量非常大,我希望能夠在瀏覽器中保存一次,並且能夠訪問它,而不是在每次加載頁面時執行API調用。保存並訪問API會導致Chrome擴展程序中的變量

這是我的理解,這可以通過將API調用放入後臺頁面,然後從內容腳本中的後臺頁面調用變量來完成。我也嘗試將數據存儲在本地存儲中。這兩種方法都不適合我,我不明白我做錯了什麼。

在我的背景頁面的代碼中,我將API結果存儲在一個變量中。我稱其爲內容腳本是這樣的:

var background = chrome.extension.getBackgroundPage(); 
var myData = background.APIData; //where APIData is the variable I set in the background page 

我嘗試使用本地存儲看起來是這樣的:

//Background page 
chrome.storage.sync.set({'value': APIData}, function() { 
     // Notify that we saved. 
     console.log('APIData saved to storage'); 
    }); 

//Content script 
var myData = localStorage["APIData"]; 

由於這一刻,延長甚至沒有加載在頁面使用我試圖訪問本地存儲的代碼。該擴展將加載其他方法,但數據似乎並不存在。我知道我的API調用正在工作,因爲擴展工作時,我把它全部放在內容腳本中。但是這會在每次頁面加載時調用API時產生問題。請幫助!

回答

0

仔細檢查您的代碼。您正在將數據設置爲兩個不同的垃圾箱。

首先,你叫chrome.storage.sync.set和 「值」 設置爲APIData的價值。

二,您致電localStorage ['APIData']它是指一個單獨的存儲箱和屬性名稱。

兩種解決方案在這裏,第一個是在一個瀏覽器擴展到設置/獲取的持久性數據的首選方式:

A1)和設置它chrome.storage.sync.set({值:數據})

A2)與chrome.storage.sync.get(空,功能(存儲){storage.value})

B1)與localStorage的設置。價值=數據

得到它

B2)拿localStorage。價值

+0

這仍然不適合我?修改我的代碼如下 //後臺頁面 chrome.storage.sync.set({'value':myData},function(){ //通知我們已保存 console.log('myData saved to storage' ); }); //內容腳本 var someData = chrome.storage.sync.get(null,function(storage){storage.myData}); – mostlynew

+0

確保您在manifest.json文件中設置了「存儲」權限集。 –

+0

是的,我這樣做:「權限」:[「storage」,「tabs」,「activeTab」,「」,「*:// */*」] – mostlynew

相關問題