Chrome扩展程序安装后挂钩/ API功能:它是否存在?

Vic*_*r S 11 google-chrome google-chrome-extension

是否有Chrome扩展程序安装挂钩/ API函数,可让我在安装或更新插件后执行操作?

我想在安装扩展程序之后执行操作,并且只在安装扩展程序后立即执行.此操作只应执行一次(安装后或更新后)扩展.

更新

有些人建议在localStorage中设置扩展的版本,我遇到的问题是,在首次安装插件时,有权访问localStorage的内容脚本不会加载到页面中.

安装插件后的AFAIK,它使用注入选项卡/页面的内容脚本,页面必须重新加载.

我不知道如何从后台页面访问localStorage; localStorage只能从内容脚本访问.

要从后台页面获取版本号到内容脚本,需要使用chrome API函数来执行脚本:

chrome.tabs.executeScript(null, {code:function_to_execute}, function() { // callback });

但是,当您安装插件时,此插件需要注入内容脚本的页面已经加载,它不会注入内容脚本,您必须重新加载页面.

更新2

查看更详细的一些提示,为了保存版本号,可以访问后台页面的localStorage.但是,对于我需要做的事情,即在安装或更新插件后重新加载特定URL上的特定选项卡(以确保内容脚本是最新版本),最终没有必要打扰localStorage.

为了保持主题,有关将版本号写入localStorage(在后台页面中)然后检查清单文件中的版本号的建议足以允许某人在第一次运行脚本时安装/或更新.

如何

使清单文件可用于后台页面(注意:这是从其他地方获取的,我不赞成它,但我不记得来源,如果你知道,让我知道,我会添加它).

// MAKE MANIFEST FILE AVAILABLE
chrome.manifest = (function() {
    var manifestObject = false;
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            manifestObject = JSON.parse(xhr.responseText);
        }
    };
    xhr.open("GET", chrome.extension.getURL('/manifest.json'), false);
    try {
        xhr.send();
    } catch(e) {
        console.log('Couldn\'t load manifest.json');
    }
    return manifestObject;
})();
Run Code Online (Sandbox Code Playgroud)

现在您可以像这样访问您的版本号: chrome.manifest.version

要写入localStorage,只需将其传递给: localStorage['my_plugin_version'] = chrome.manifest.version

Håv*_*ard 4

您可以使用背景页面来完成此操作。当扩展安装后,后台页面会在后台打开,从而执行。为了确保它不会每次都执行,只需在 中存储一个值即可localStorage