我正在嘗試編寫一個允許用戶輕鬆登錄到內部網頁的Chrome擴展。該擴展將顯示一個包含預定義憑據的菜單,用戶可以從該菜單中選擇一個並立即將其登錄到相應的網頁中(想想書籤++)。chrome.storage.sync.get不返回完整的JS對象
作爲第一步,我想寫一個接受'名稱','網址','用戶名'和'密碼'信息的功能,並且使用chrome.storage.sync.set。用戶可以使用chrome.storage保存多組此類信息(例如,針對同一網站的不同用戶名)。我能夠成功地完成此操作,並且選項頁面也能夠列出所有保存的信息。目前,請忽略與客戶端密碼加密相關的安全問題。
這是我的manifest.json
{
"name": "My Chrome Extension",
"version": "1.0",
"manifest_version": 2,
"description": "Easy login to My Webapp",
"browser_action": {
"default_icon": "images/Cloud16.png",
"default_popup": "html/popup.html"
},
"options_page": "html/options.html",
"permissions": ["<all_urls>", "storage", "unlimitedStorage"]
}
這是保存處理程序選項頁(在options.js):
function saveHandler() {
var name = $("#name").val(),
url = $("#url").val(),
password = $("#password").val(),
key = Date.now() + "", //key based on currentTimeInMillis
obj = {
"id": key,
"name": name,
"url": url,
"password": password
};
chrome.storage.sync.get('LOGIN_COLLECTION', function(items) {
//Create a new collection if not exists
if(items && !items['LOGIN_COLLECTION']) {
items['LOGIN_COLLECTION'] = {};
}
items['LOGIN_COLLECTION'][obj.id] = obj;
chrome.storage.sync.set(items, function() {
// Notify that we saved.
console.log('Settings saved');
chrome.storage.sync.get('LOGIN_COLLECTION', function(data) {
console.dir(data);
});
});
$("#addUrlDialog").slideUp();
loadExistingInfo(); //Read persisted data, and show. This works fine!!
});
}
當工具欄上的圖標分機用戶點擊,我顯示一個彈出的html,它有一個腳本來獲取在選項頁面中保存的數據(使用chrome.storage.get)。在彈出來獲取數據的代碼如下所示:
chrome.storage.sync.get('LOGIN_COLLECTION', function(items) {
var container = $("#listContainer"),
data = items['LOGIN_COLLECTION'];
for(item in data) {
console.dir(item); //**Outputs empty object**
$("<div></div>").text(item.name).appendTo(container);
}
});
正如你所看到的,抓取是就能得到的只有頂層對象的信息,但沒有它的屬性。我應該使用內容腳本還是後臺頁面來讀取由chrome.storage.sync.set設置的數據?任何幫助,將不勝感激。
非常感謝。我會測試這個以確保它能正常工作。 – sathishpaul
確實是問題的關鍵。修復它使擴展工作。謝謝 :) – sathishpaul