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