美文网首页
chrome插件更新可以不依赖于google store

chrome插件更新可以不依赖于google store

作者: jaymz明 | 来源:发表于2020-03-21 10:13 被阅读0次

还是那个github插件,老板提出当有新的版本发布后,可以提示用户,并让用户自主下载。
考虑到安全性和经济问题(注册开发者账号就需要$5.00),暂不考虑将它发布到google store里,具体操作自己想。好吧,是一个挑战。
下载页面好弄,可以按照github上release页面去设计,每当我有新的版本发布后,在release页面更新新的安装包,然后插件里option.html页面里动态去拿这个页面的信息。如下:

image.png

弹出该框可以用插件里options_ui设置来完成,用下面方法当点击浏览器图标的时候弹出新的tab页面。

  chrome.tabs.create({ url: 'chrome://extensions/?options=' + chrome.runtime.id });

这里我们有了新版本的下载链接,版本信息。那么做到更新的话还需要当前用户使用的版本信息。

image.png

如果了解content-script.js和background.js的使用范围就很好办了,做法如下:
content-script.js里面我们去定时获取当前github上最新版本的信息(有api可以使用),本地用户版本我们可以通过文件获取。然后进行比较,一旦发现版本不一致,将message传递到background.js里面,由background.js去创建badge。background.js是一个守护进程,会一直运行在后端。

\\content-script.js
checkVersion:function(callback){
        var obj = {}
        var intervalId = setInterval(function(){
            let currentVersion = configUtil.CHROME_SCRIPT_VERSION
            console.log('currentVersion',currentVersion)
            apiUtil.getLatestVersion(function(data){
            console.log('server version',data)
            let hasNew = data.version !== currentVersion
            obj['latestVersion'] = data.version
            obj['hasNew'] = hasNew
              if(hasNew){
                chrome.runtime.sendMessage({hasNew: true}, function(response) {
                    console.log('receive data from backend:' + response);
                });
                }else{
                    clearInterval(intervalId)
                }
            })
           callback(obj)
         },10000*60)
    }
\\background.js
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse)
{
    if(request.hasNew){
        chrome.browserAction.setBadgeText({text: 'new'});
        chrome.browserAction.setBadgeBackgroundColor({color: [255, 0, 0, 255]});
    }else{
        chrome.browserAction.setBadgeText({text: ''});
    }
    sendResponse('call successful')
});

到这里我们可以做到一旦版本不一致,我们可以在图标上有new的提示。那么如果我们还需要提示用户当前最新的版本是什么,或者我们给出下载链接呢?
也是可以做到的,我们使用chrome.storage。首先在manifest.json里申明可以使用storage,然后在查到有新的版本时,将信息存到storage里。

var obj = {
                  'latestVersion':result.latestVersion,
                  'hasNew': result.hasNew
              }
       window.chrome.storage.sync.set({
                'versionInfo': obj
       },
          function(){
              console.log('set value successfully.')
          }
        );

在需要的地方获取即可:

function getVersionValue(callback) {
        chrome.storage.sync.get(['versionInfo'], callback);
}

实现如下效果。

image.png

这样看起来是不是达到了提示用户有新版本的初衷了,不仅安全,还省钱。为公司有我这样的员工鼓掌,哈哈。

再不完美的行动,也胜过被动的等待。五步、十步都是进步,顿悟、渐悟都是领悟。

相关文章

网友评论

      本文标题:chrome插件更新可以不依赖于google store

      本文链接:https://www.haomeiwen.com/subject/oklsyhtx.html