我在哪里可以看到哪个chrome扩展API对哪个chrome版本有效

时间:2012-07-12 13:40:09

标签: google-chrome-extension

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

The Chrome extension page给了我一个很好的概述支持,但没有提到什么版本。 experimental API overview也是如此。那个特定的API是否仍然是实验性的,或者它已经在金丝雀中得到支持,例如。

如果我尝试使用Chrome Samples website中的示例,我通常需要将某些API调用从chrome.experimental.foo更改为chrome.foo,或者发现它根本不受支持。 (chrome.experimental.alarm发生了什么?)这通常意味着只需使用试错法消除所有错误,直到样本有效。

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

1 个答案:

答案 0 :(得分:4)

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

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

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

  • 首先,安装所有Chrome版本。这自动完成并不费时:我编写了一个自动安装Chrome的脚本,它复制了之前的个人资料:请参阅this answer
  • 测试是否存在该功能:
    1. 编写包含所有permissions的清单文件(始终忽略无法识别的权限)。
    2. Chrome 18+:使用清单版本1和2复制扩展程序。清单版本1(example)中禁用了某些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, {}));
// ...