【问题标题】:Chrome extension post-install hook/API function: does it exist?Chrome 扩展安装后挂钩/API 功能:它存在吗?
【发布时间】: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


【解决方案1】:

您可以使用background page 执行此操作。安装扩展时,后台页面会在后台打开,从而执行。为确保它不会每次都执行,只需在 localStorage 中存储一个值。

【讨论】:

  • 我发现另一个帖子建议,类似于您的建议,使用后台页面和 localStorage 来存储插件的版本。我认为这对于我想做的事情已经足够了,尽管我想这意味着到目前为止,Chrome API 不支持这种行为的“内置”东西......stackoverflow.com/questions/4910684/…
  • 我不知道如何从后台页面访问localStorage。据我所知,localStorage 只能从内容脚本访问。这里的问题是,从后台页面获取版本号到内容脚本需要使用 chrome API 来执行脚本chrome.tabs.executeScript(null, {code:function_to_execute}, function() { // callback });。现在的问题是,当您安装插件时,并且该插件需要注入内容脚本的页面已经加载,它不会注入内容脚本。
  • 您可以在后台访问localStorage。你试过了吗?
  • 啊,但是你的意思是后台页面的localStorage,而不是内容脚本的...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多