2

我喜欢 chrome 通过其扩展 API 为我提供的功能。但是我总是发现自己迷失在哪个 chrome 版本支持什么 API 以及最后一个 chrome.experimental 功能何时将其纳入支持的扩展的丛林中。

Chrome 扩展页面为我提供了一个很好的概述,它支持什么,但没有提及从什么版本开始。实验 API 概述也是如此。例如,该特定 API 是否仍处于试验阶段,或者它是否已在金丝雀中得到支持。

如果我尝试来自 chrome Samples 网站的示例,我通常必须将一些 API 调用从chrome.experimental.footo更改为chrome.foo或发现它根本不受支持。(发生了chrome.experimental.alarm什么?)这通常意味着只使用试错法来消除所有错误,直到样本起作用。

tldr; 所以,我想知道是否有一个概述页面告诉我从什么版本开始,支持什么 API 或何时决定放弃实验性 API。如果没有这样的页面,处理这种情况的推荐方式或您个人的方法是什么?

4

1 回答 1

4

此页面上,描述了生成官方文档(自动从 Chrome 存储库中生成)的过程。在同一页面上,您还可以阅读如何检索旧分支的文档。请注意,文档在某种程度上是不完整的:已弃用的 API 会立即包含在内,尽管它们仍然存在(例如onRequest)。

What's New in Extensions是 API 更改和更新的简短列表(不包括大多数实验性 API)。它必须手动编辑,所以它并不总是最新的。例如,当前稳定版本是 20,但页面的最后一个条目是 19。

如果您确实需要包含所有 API 更改的单个页面,可以使用以下方法:

  • 首先,安装所有 Chrome 版本。自动完成时这并不耗时:我编写了一个脚本来自动安装 Chrome,它复制了以前的配置文件:请参阅此答案
  • 测试特征是否存在:
    1. 编写一个包含所有权限的清单文件(始终忽略无法识别的权限)。
    2. Chrome 18+:使用清单版本 1 和 2 复制扩展程序。清单版本 1 中禁用了某些 API(示例)。
    3. 测试一项功能是否已实现并按预期运行是非常耗时的。因此,您最好测试 API 是否存在。
      执行此操作的合理方式是递归遍历 的属性chrome,并记录结果(显示给用户/发布到服务器)。
  • 测试的过程。使用以下方法之一:
    • 使用单个 Chrome 配置文件,并从最低版本开始测试。
    • 为每个 Chrome 版本使用单独的配置文件,以便您可以并排测试多个 Chrome 版本。
  • 后处理:解释结果。

获取信息的示例代码:

/** 
 * Returns a JSON-serializable object which shows all defined methods
 * @param root    Root, eg.  chrome
 * @param results Object, the result will look like {tabs:{get:'function'}}
 */
function getInfo(root, results) {
    if (root == null) return results;
    var keys = Object.keys(root), i, key;
    results = results || {};
    for (i=0; i<keys.length; i++) {
        key = keys[i];
        switch (typeof root[key]) {
            case "function":
                results[key] = 'function';
            break;
            case "object":
                if (subtree instanceof Array) break; // Exclude arrays
                var subtree = results[key] = {};
                getInfo(root[key], subtree);         // Recursion
            break;
            default:
                /* Do you really want to know about primitives?
                 * ( Such as chrome.windows.WINDOW_ID_NONE ) */
        }
    }
    return results;
}
/* Example: Get data, so that it can be saved for later use */
var dataToPostForLaterComparision = JSON.stringify(getInfo(chrome, {}));
// ...
于 2012-07-12T14:47:42.757 回答