setBadgeText chrome扩展丢失计数数字

时间:2017-10-06 21:30:00

标签: javascript google-chrome google-chrome-extension

如果方法SetBadgeText没有丢失计数数字?我正在努力的是,当我点击一个按钮并且计数器开始计算数字之后,我将检查其他一些页面,有时计数从零开始,同样的事情是当我想关闭chrome并再次打开它时。如何才能将实际的setBadgeText数保存在内存中并从最新版本开始而不会丢失它?

  

background.js

var counter = 0;

chrome.runtime.onMessage.addListener(message => {
    if(message === 'clicked') {
        counter += 1;
        chrome.browserAction.setBadgeText({
            text: counter.toString()
        });
    }
});

内容的script.js

document.body.addEventListener('click', e => {
    if(e.target.matches('[value="Google Search"]')) {
        chrome.runtime.sendMessage('clicked')
    }
});

的manifest.json

{
    "manifest_version": 2,
    "name": "Counter",
    "version": "1.0",

    "content_scripts": [
      {
        "matches": ["https://*/*"],
        "run_at": "document_end",
        "js": ["content-script.js"]
      }
    ],
    "description": "description",

    "background": {
      "persistent": false,
      "scripts": ["background.js"]

    },

    "browser_action": {
      "default_title": "counter"

    }
}

1 个答案:

答案 0 :(得分:1)

使用存储API:https://developer.chrome.com/apps/storage

“同步”存储会同步到您登录的任何Chrome浏览器。 “本地”存储是,呃,本地。

以下是将存储API集成到示例中的方法:

// background.js
chrome.runtime.onMessage.addListener(message => {
    if(message === 'clicked') {
        chrome.storage.local.get('counter', ({counter}) => {
            counter += 1;
            chrome.browserAction.setBadgeText({
                text: counter.toString()
            });
            chrome.storage.local.set('counter', counter)
        })

    }
});

您还需要为清单添加“存储”权限:

// manifest.json
{
    ...

    "browser_action": {
      "default_title": "counter"

    },

    permissions: [
        "storage"
    ]
}