2015-04-01 155 views
1

我有一個函數從chrome.storage獲取數據並將其加載到一個數組中,如果我使用一行代碼將一個空數組保存到chrome.storage中,一切正常然後在將擴展名用作用戶之前將其取出。檢查數據是否已經存在於chrome.storage.sync中

的問題是,用戶無法做到這一點,如果我開始延長,第一次沒有這樣做那麼它看起來像鉻傳回未定義到這會導致這個錯誤的變量:

"Uncaught TypeError: Cannot read property '8' of undefined"

在這一行:

if (SavedReminders[i][8] == "Full") { 

我不完全知道究竟是怎麼回事,但我想,如果有一種方法來檢查,如果數據chrome.storage已經存在或保存空的方式數組只是第一次用戶打開將fi的擴展x it。

這是我的裝載功能:

function LoadFromFile() { 
    reminds = {} 
    chrome.storage.sync.get({ reminds: [] }, function (result) { SavedReminders = result.reminds }); 
} 

和保存功能:

function SaveToFile() { 
    reminds={} 
    chrome.storage.sync.set({reminds:SavedReminders }, 
     function() { 
      console.log(SavedReminders, reminds); 
     }); 
} 

任何幫助,將不勝感激,謝謝。

回答

1

您可以使用每個鍵的默認值將對象傳遞給api(而不是鍵的數組)。它將返回那裏沒有的鍵的默認值。
你也可以保持原樣,並檢查它的==未定義,但我建議的方式更清潔。
有關如何通過這樣的對象細節官方API文檔。存儲:

https://developer.chrome.com/extensions/storage StorageArea方法:獲得 StorageArea.get(string or array of string or object keys, function callback) (可選)鍵: ......「或字典中指定的默認值」。 ..

so chrome.storage.local.get({foo:"hi", bar:"there"}) 將返回obj其中obj [「foo」]是「嗨」尚未保存時。

+1

「您可以將對象傳遞給api,併爲每個鍵使用默認值。」 ,...... 怎麼樣? – sports 2015-09-14 22:02:52

+1

Ive更新了答案 – 2015-09-14 22:15:27

+0

「will return obj」 - 你的obj在哪裏?你確定這有效嗎?嘗試在Firefox 48'all = chrome.storage.StorageArea.get({foo:「hi」,bar:「there」});'凍結了我的調試器 – user1141649 2016-07-10 16:37:58

1

在我的情況下,我正在尋找一本字典,而且這個調用似乎正在返回某種原型對象以及字典(所以對象類型不是「未定義」)。爲了獲得我實際尋找的值,我必須檢查返回對象的屬性。

chrome.storage.sync.get('profile', function(profileObj) { 
    var profile = profileObj.profile; 
    if (typeof profile === "undefined") { 
    // No profile in storage 
    } else { 
    // Profile exists in storage 
    } 
}); 
0

你也可以檢查是否storage.syncstorage.local返回使用空物體檢測未初始化存儲:if(!_empty(SavedReminders))if (SavedReminders && SavedReminders[i] && SavedReminders[i][8] == "Full") {

function _empty(o) { 
    return Object.keys(o).length === 0 && o.constructor === Object 
} 

所以行if (SavedReminders[i][8] == "Full") {將成爲無論是。

相關問題