如何知道用户最近是否更新了Chrome扩展程序,以便我可以提醒他们

时间:2015-03-21 15:45:44

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

所以我有一个信息按钮,每当用户更新扩展名时,右上方会显示一个小红点,表示有警报(新更新)。

enter image description here enter image description here

我现在如何做,是通过在localStorage中查看更新时设置一行 - 如果找不到该行,则该按钮将具有红点。

问题是,这个解决方案要求我在每次更新后每次启动更新时都会改变几行,如下所示:

//1.1.2 was the last version
localStorage.removeItem("update-1.1.2");

...

if( localStorage.getItem("update-1.1.3") === null ) {
  //show button image with red dot
}
else {
  //show button image without red dot
}

...

$('#info').click(function() 
{
  localStorage.setItem("update-1.1.3", "YES");
  //swap the button image w/ red dot, with the same image w/o the red dot
});

正如您所看到的,每次更新时我都必须更改" update-x.x.x"字符串在3个位置。

所以我的两个问题是:  - 有一个更好的方法吗?也许是一种确定用户是否更新了扩展程序的方法?   - 图像交换是最好的方法吗?或者我应该有一个红点图像,使它出现和消失。对我而言,性能差异似乎很小 - 它取决于是否交换整个图像,或者隐藏/隐藏另一个图像更有效。

2 个答案:

答案 0 :(得分:5)

可以帮助您的两件事,均由chrome.runtime API提供:

  1. 您可以在更新后第一次检测到扩展程序:

    chrome.runtime.onInstalled.addListener( function(details) {
      switch(details.reason) {
        case "install":
          // First installation
          break;
        case "update":
          // First run after an update
          break;
      }
    });
    
  2. 您可以从清单中提取它,而不是对版本号进行硬编码:

    chrome.runtime.getManifest().version
    
  3. 那就是说,我认为当你有话要对用户说时,更新代码中的一些常量是完全合理的。

    对于红点,您可以尝试使用动态构建的图标,在调用<canvas>时使用imageDatasetIcon属性。或者,为简单起见,请使用带有setBadgeText的徽章。

答案 1 :(得分:0)

通过一些代码更改和chrome apis,您应该能够完全删除手动常量更新。此代码未经测试,并使用how to compare software version number using js的答案来比较版本。

var previousVersion = localStorage.getItem('previousVersion') || "0";
var currentVersion = chrome.runtime.getManifest().version;
var versionComparison = versionCompare(previousVersion, CurrentVersion);

if (previsouVersion === "0") {
    // new install
} else if (versionComparison == -1) {
    // version is upgraded
} else if (versionComparison == 0) {
    // version is the same
}