检测Chrome扩展程序首次运行/更新

rac*_*ck1 91 google-chrome google-chrome-extension

扩展如何发现它是第一次运行或刚刚更新,以便扩展可以执行某些特定操作?(例如,打开帮助页面或更新设置)

Alv*_*ong 166

在较新版本的Chrome(自Chrome 22以来)中,您可以使用chrome.runtime.onInstalled更清洁的活动.

例:

// Check whether new version is installed
chrome.runtime.onInstalled.addListener(function(details){
    if(details.reason == "install"){
        console.log("This is a first install!");
    }else if(details.reason == "update"){
        var thisVersion = chrome.runtime.getManifest().version;
        console.log("Updated from " + details.previousVersion + " to " + thisVersion + "!");
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 我使用了这段代码一段时间,它工作得很好,直到我的扩展请求更新的新权限(暂停扩展直到用户接受权限).当接受权限并且未扩展扩展时,onInstalled事件从未触发,因此更新脚本从未运行.值得一提的是,对于那些在安装时运行更新脚本的人,您可能需要在请求新权限的情况下监听其他事件. (3认同)
  • 这次真是万分感谢!我在互联网上发现的所有内容都是将扩展版本存储在localStorage中,直到我最终偶然发现了这个答案,这当然是一个可行的解决方案,但我很惊讶Chrome没有内置的东西!我很高兴我没有失望:) (2认同)
  • 自Chrome 22发布于2012年9月 (2认同)
  • @Elimm似乎是Chrome的错误,你应该报告错误跟踪器. (2认同)

Moh*_*our 68

如果要检查扩展是否已安装或更新,您可以执行以下操作:

chrome.runtime.getManifest().version
Run Code Online (Sandbox Code Playgroud)

  • 这篇文章很棒......你应该把这个标记作为答案.谢谢穆罕默德! (3认同)
  • @VictorS上面的目的是在后台页面中使用,如果你打算在内容脚本中使用它,那么只需直接调用chrome.app.getDetails().version.我以前之前得到版本的原因是因为在Chrome扩展开发的早期阶段,没有chrome.app对象,所以我们不得不对XHR清单.您可以在闭包中完成所有这些操作,这样您就可以保证您的呼叫方法正确.我通常将所有内容封装在一个类对象中. (3认同)

JVi*_*lla 19

幸运的是,现在有这样的事件(因为Chrome版本22,更新事件25).

对于已安装的活动:

chrome.runtime.onInstalled.addListener(function() {...});
Run Code Online (Sandbox Code Playgroud)

对于OnUpdateAvailable事件:

chrome.runtime.onUpdateAvailable.addListener(function() {...});
Run Code Online (Sandbox Code Playgroud)

开发人员文档中关于OnUpdateAvailable的重要摘录说:

更新可用时触发,但由于应用程序当前正在运行,因此未立即安装.如果您不执行任何操作,则下次卸载后台页面时将安装更新,如果您希望尽快安装它,则可以更快地安装chrome.runtime.reload().


Max*_*keh 9

简单.当扩展程序首次运行时,它localStorage是空的.首次运行时,您可以在那里写一个标记,将所有后续运行标记为非第一个.

例如,在background.htm中:

var first_run = false;
if (!localStorage['ran_before']) {
  first_run = true;
  localStorage['ran_before'] = '1';
}

if (first_run) alert('This is the first run!');
Run Code Online (Sandbox Code Playgroud)

编辑:要检查扩展是否刚刚更新,在第一次运行时存储版本而不是简单标志,然后当前扩展版本(通过XmlHttpRequest清单获取)不等于存储localStorage的扩展名时,扩展名为已更新.