安装hook / API函数:它存在吗?
是否有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
你可以使用背景页面来做到这一点。 当安装扩展程序时,后台页面将在后台打开并执行。 为了确保它不会每次都执行,只需将值存储在localStorage
。