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

时间:2011-12-18 01:42:46

标签: 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;
})();

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

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

1 个答案:

答案 0 :(得分:3)

您可以使用background page执行此操作。安装扩展时,后台页面在后台打开,然后执行。要确保每次都不执行,只需将值存储在localStorage