所以我有一个信息按钮,每当用户更新扩展名时,右上方会显示一个小红点,表示有警报(新更新)。
我现在如何做,是通过在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个位置。
所以我的两个问题是: - 有一个更好的方法吗?也许是一种确定用户是否更新了扩展程序的方法? - 图像交换是最好的方法吗?或者我应该有一个红点图像,使它出现和消失。对我而言,性能差异似乎很小 - 它取决于是否交换整个图像,或者隐藏/隐藏另一个图像更有效。
答案 0 :(得分:5)
可以帮助您的两件事,均由chrome.runtime
API提供:
您可以在更新后第一次检测到扩展程序:
chrome.runtime.onInstalled.addListener( function(details) {
switch(details.reason) {
case "install":
// First installation
break;
case "update":
// First run after an update
break;
}
});
您可以从清单中提取它,而不是对版本号进行硬编码:
chrome.runtime.getManifest().version
那就是说,我认为当你有话要对用户说时,更新代码中的一些常量是完全合理的。
对于红点,您可以尝试使用动态构建的图标,在调用<canvas>
时使用imageData
和setIcon
属性。或者,为简单起见,请使用带有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
}