【发布时间】:2011-12-19 04:49:56
【问题描述】:
是否有 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
【问题讨论】:
-
嘿维克多 - 感谢您发布这个问题。我认为您对 SE 质量标准的担忧可以通过阅读常见问题解答 (stackoverflow.com/faq) 来回答。确实,我们喜欢我们的问题以某种方式形成。我们不是想成为混蛋——我们只是想把问题表述得非常清楚,并忽略与问题无关的任何内容。我已对您的问题进行了编辑,以使标题更清晰,文本更短,更切题。这就是我们正在寻找的全部内容 - 严格遵守问题的事实。
-
您很久以前访问过的其他问题之一有了新的答案,Chrome 现在确实内置了这个功能!查看答案HERE,我很高兴看到这些天有多容易:)
标签: google-chrome google-chrome-extension