设置徽章文本铬扩展丢失计数数字



如果方法SetBadgeText不丢失计数数字,这是可能的吗?我挣扎的是,当我单击一个按钮和计数器开始计算数字时,之后我将检查其他一些页面,有时计数从零开始,同样的事情是当我想关闭 chrome 并再次打开它时。如何将您的实际 setBadgeText 号码保存在内存中并从最新的号码开始而不会丢失它?

背景.js

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

内容脚本.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"
    }
}

使用存储 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"
    ]
}

最新更新