2

Chromeが拡張APIを通じて提供してくれるものが大好きです。しかし、私は常に、どのAPIがどのChromeバージョンでサポートされているのか、そして最後のchrome.experimental機能がサポートされている拡張機能にいつ組み込まれたのかについて迷っています。

Chrome拡張機能のページには、サポートされているものの概要が表示されますが、バージョン以降は言及されていません。実験的なAPIの概要についても同じことが言えます。その特定のAPIはまだ実験的なものですか、それともカナリアですでにサポートされていますか。

chrome Samples Webサイトのサンプルを試してみると、通常、一部のAPI呼び出しをからに変更するかchrome.experimental.foochrome.fooまったくサポートされていないことがわかります。(何が起こったのchrome.experimental.alarmですか?)これは通常、サンプルが機能するまで、試行錯誤のアプローチを使用してすべてのエラーを排除することを意味します。

tldr; ですから、どのバージョン、どのAPIがサポートされているのか、または実験的なAPIを削除することがいつ決定されたのかを教えてくれる概要ページがあるのではないかと思います。そして、そのようなページがない場合、この状況に対処するための推奨される方法またはあなたの個人的なアプローチは何ですか?

4

1 に答える 1

4

このページでは、公式ドキュメントを(Chromeリポジトリから自動的に)生成するプロセスについて説明します。同じページで、古いブランチのドキュメントを取得する方法も読むことができます。ドキュメントがどういうわけか不完全であることに注意してください。非推奨のAPIは、まだ存在していますが(などonRequest)、すぐに含まれます。

拡張機能の新機能は、APIの変更と更新の簡単なリストです(ほとんどの実験的なAPIを除く)。手動で編集する必要があるため、常に最新であるとは限りません。たとえば、現在の安定バージョンは20ですが、ページの最後のエントリは19です。

すべてのAPI変更を含む単一のページが本当に必要な場合は、次のアプローチを使用できます。

  • まず、すべてのChromeバージョンをインストールします。これは、自動的に実行する場合は時間がかかりません。以前のプロファイルを複製するChromeのインストールを自動化するスクリプトを作成しました。この回答を参照してください。
  • 機能の存在をテストします。
    1. すべてのアクセス許可を含むマニフェストファイルを作成します(認識されないアクセス許可は常に無視されます)。
    2. Chrome 18以降:マニフェストバージョン1および2で拡張機能を複製します。一部のAPIはマニフェストバージョン1で無効になっています()。
    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 に答える