iT邦幫忙

DAY 19
0

Chrome Extension 學習筆記系列 第 19

Chrome Extension 開發經驗篇 19 - 如何同步 Extension 的選項設定?

[好讀版]

之前有介紹選項頁面,該頁面會提供使用者設定個人化的選項(如:外觀樣式),那麼要如何讓這些設定自動同步呢?

同步方法

Step 1. 在 manifest.json 設定檔中取得 storage 權限。如下所示。

manifest.json

{
...
"permissions": [
"storage"
],
...
}

Step 2. 使用 chrome.storage.sync APIs。如下所示。

chrome.storage.sync.set

// set object
chrome.storage.sync.set({
'options1': {
'language': 'english',
'autoRun': false,
'delayTime': 3000
},
'options2': function (params) {console.log(params);}
}, function () {
// callback
});

**說明:**options2 的值原本為 function,將會被序列化為 {}。

chrome.storage.sync.get

// get all
chrome.storage.sync.get(function (obj) {
// callback
console.log(obj);
});

// get by string
chrome.storage.sync.get('options1', function (obj) {
// callback
console.log(obj);
});

// get by array of string
chrome.storage.sync.get(['options1', 'options2'], function (obj) {
// callback
console.log(obj);
});

// get by object
chrome.storage.sync.get({'options1': null}, function (obj) {
// callback
console.log(obj);
});

chrome.storage.sync.remove

// remove by string
chrome.storage.sync.remove('options1', function () {
// callback
});

// remove by array of string
chrome.storage.sync.remove(['options1', 'options2'], function () {
// callback
});

chrome.storage.sync.clear

// clear all
chrome.storage.sync.clear(function () {
// callback
});

同步的限制

QUOTA_BYTES (102,400) - 可以在同步儲存區儲存的資料量大小 (以 bytes 為單位)
QUOTA_BYTES_PER_ITEM (8,192) - 同步儲存區中每個項目的大小 (以 bytes 為單位)
MAX_ITEMS (512) - 可以在同步儲存區儲存的項目數量
MAX_WRITE_OPERATIONS_PER_HOUR (1,000) - 一小時內可進行的操作次數 (set, remove, clear)
MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE (10) - 在連續的十分鐘內,每分鐘可進行的操作次數 (set, remove, clear)

(不知道是不是我理解錯誤,我一直覺得這裡的限制有點怪。每分鐘 10 次,十分鐘就 100 次,那一小時也才 600 次,怎麼也不會超過 1,000 次啊!)

討論

之前在實作選項設定同步時,因為有操作次數的限制,所以寫了一個半同步的方法,儲存區以 local 為主,在定期去更新 sync。不過會遇到一種情況,假如一個 Google 帳號不只一人使用,那兩個人同時設定選項時,該選擇誰的設定? 這裡我還沒有想到比較好的做法,所以就不提供程式碼了。


上一篇
Chrome Extension 開發經驗篇 18 - 如何跨域資源共享?
下一篇
Chrome Extension 開發經驗篇 20 - 如何看其他 Extension 的程式碼?
系列文
Chrome Extension 學習筆記30

尚未有邦友留言

立即登入留言