Google chrome Chrome extension安装后钩子/API函数:是否存在?

Google chrome Chrome extension安装后钩子/API函数:是否存在?,google-chrome,google-chrome-extension,Google Chrome,Google Chrome Extension,是否有一个Chrome扩展安装后钩子/API函数,可以让我在插件安装或更新后执行操作 我想在我的扩展安装后执行一项操作,并且仅在安装后立即执行。此操作只能执行一次(安装后或更新后)扩展 更新 有些人建议在localStorage中设置扩展的版本,我遇到的问题是,当插件第一次安装时,可以访问localStorage的内容脚本没有加载到页面中 AFAIK在安装插件后,它使用注入选项卡/页面的内容脚本,页面必须重新加载 我不知道如何从后台页面访问localStorage;只能从内容脚本访问localS

是否有一个Chrome扩展安装后钩子/API函数,可以让我在插件安装或更新后执行操作

我想在我的扩展安装后执行一项操作,并且仅在安装后立即执行。此操作只能执行一次(安装后或更新后)扩展

更新 有些人建议在localStorage中设置扩展的版本,我遇到的问题是,当插件第一次安装时,可以访问localStorage的内容脚本没有加载到页面中

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


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

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

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

然而,当你安装一个插件,并且这个插件需要注入内容脚本的页面已经加载,它没有注入内容脚本,你必须重新加载页面

更新2 更详细地看一下提供的一些提示,为了保存版本号,可以访问后台页面的localStorage。然而,我需要做的是,在安装或更新插件后,在特定的URL上重新加载特定的选项卡(以确保内容脚本是最新版本),结果是不需要使用localStorage

为了继续讨论这个主题,给出的关于将版本号写入本地存储(在后台页面中),然后对照清单文件中的版本号进行检查的建议已经足够好了,允许用户在第一次安装/更新脚本时运行该脚本

如何 使清单文件可用于后台页面(注意:这是从其他地方取得的,我不认为这是功劳,但我不记得其来源,如果你知道,请告诉我,我会添加它)

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


要写入localStorage,只需像这样传入它:
localStorage['my_plugin\u version']=chrome.manifest.version

您可以使用。安装扩展时,后台页面在后台打开,然后执行。为了确保它不是每次都执行,只需将一个值存储在
localStorage

嘿,维克多-谢谢你提出这个问题。我认为您对SE质量标准的担忧可以通过阅读发布FAQ()来回答。的确,我们喜欢以某种方式提出问题。我们并不是想做傻子——我们只是想把问题表达得非常清楚,而忽略了与问题无关的任何东西。我对你的问题进行了编辑,使标题更清晰,文本更短,更切题。这就是我们想要的——严格遵守问题的事实。在你很久以前访问过的其他问题中,有一个新的答案,Chrome现在确实内置了这个功能!看看答案,我很高兴看到这几天有多容易:)我发现另一篇帖子建议,类似于你的建议,使用背景页面和本地存储来存储插件的版本。我认为这对于我想做的事情已经足够了,尽管我猜这意味着到目前为止,ChromeAPI还不支持这种行为的“内置”功能。。。我不知道如何从后台页面访问localStorage。据我所知,只能从内容脚本访问localStorage。这里的问题是,要从后台页面获取内容脚本的版本号,需要使用ChromeAPI执行脚本
chrome.tabs.executeScript(null,{code:function\u to\u execute},function(){//callback})。现在的问题是,当你安装一个插件,并且该插件需要插入内容脚本的页面已经加载时,它不会插入内容脚本。你可以在后台页面中访问
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;
})();