尽管使用了本地存储设备,Chrome扩展程序仍要求打开同步

时间:2018-11-26 11:12:32

标签: javascript google-chrome-extension

我正在使用一个Chrome扩展程序,该扩展程序将数据存储在本地存储中。但是,当我从Chrome Play商店安装到其他系统时,它会要求打开同步功能。以下是我的清单。有趣的是,即使有人拒绝打开同步,它仍然可以工作。

{
  "manifest_version": 2,
  "name": "XX",
  "description": ".....",
  "version": "0.1",
  "chrome_url_overrides": {
    "newtab": "newtab.html"
  },
  "icons": {
    "16": "icon_16.png",
    "128": "icon_128.png",
    "48": "icon_48.png"
  },
  "content_scripts": [
    {
      "matches": [
        "http://*/*"
      ],
      "css": [
        "bootstrap.css"
      ],
      "js": [
        "jquery.js",
        "bootstrap.js",
        "custom.js"
      ],
      "run_at": "document_end"
    }
  ],
  "background": {
  },
  "browser_action": {
    "default_title": "..."
  },
  "permissions": [
    "tabs",
    "storage"
  ]
}

我怎么了?

更新 下面是与存储相关的代码

 // Fetch last timestamp
    chrome.storage.local.get('records_fetch_ts', function (date_rec) {
        old_time = date_rec['records_fetch_ts'];
        if(typeof old_time != 'undefined') {
            current_time = new Date().getTime()
            var timeinmilisec = current_time - old_time;
            days = Math.floor(timeinmilisec / (1000 * 60 * 60 * 24));
        }

    });

    chrome.storage.local.get('records', function (result) {
        records = result;
        //records = null;

        if (!$.isEmptyObject(records))
            entries = JSON.parse(result['records'])

            // Preparation of Random result
            if (entries.length > 0)
                itemsLength = entries.length;

            if (itemsLength > 0)
                random_number = Math.floor((Math.random() * itemsLength) + 1);

            single_item = entries[random_number];
            console.log(single_item);

            if (single_item != null)
                $('#asin').html(single_item['asin'])
            updateUI(single_item)
            console.log(days)
        //if (records == null && days > 10) {
        if ((days < 0 || days > 10) || records == null) {
            console.log('Fetch me dude');
            fetchData();
        }
    });

1 个答案:

答案 0 :(得分:1)

1)请注意,即使禁用了同步,chrome.storage.sync也可以工作-它的行为类似于local(限制除外)。因此,人们始终可以使用sync而不用担心它是否由用户启用。

2)无论扩展名是否完全使用storage,浏览器都将要求打开同步。请注意以下措辞:

Sync nag

“扩展程序同步”子选项的用途不仅是storage.sync,而且:

  • 已安装扩展的列表和安装源,
  • 其启用/禁用状态及其原因,
  • 他们在扩展名“ shelf”中的订单。

如果您感到好奇,可以查看chrome://sync-internals/的“同步节点浏览器”以查看数据。注意“扩展”和“扩展设置”集合之间的区别。

无法启用一个同步,而不能同步另一个(哦,希望如此)。

在这种情况下,提示提示“如果您希望在浏览器的所有实例中都安装此软件,请打开同步”,这是正常现象。