2017-10-06 72 views
0

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

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

是的,但如何能用setBadgetext连接?我只发现主要使用HTML的功能。 – Mkik

+0

增加了一个例子 – Sidney

+0

谢谢,这让我变得更加清楚。你的回复对我很有帮助。你只能告诉我什么函数,我应该用什么变量来加载计数器号码,当我关闭Chrome并想再次打开它? – Mkik