よくある質問

質問に対する回答が見つからない場合は、Chrome ウェブストアに関するよくある質問Stack Overflow の [google-chrome-extension] タグchromium-extensions グループストアのヘルプをご覧ください。

全般

Google Chrome 拡張機能とは

Google Chrome 拡張機能は、Chrome ブラウザ内で動作するアプリケーションで、追加機能、サードパーティのウェブサイトやサービスとの統合、カスタマイズされたブラウジング体験を提供します。

拡張機能の開発用に Chrome を設定するにはどうすればよいですか?

拡張機能をサポートするバージョンの Chrome を使用していれば、独自の拡張機能の作成を開始するために必要なものはすべて揃っています。まず、デベロッパー モードをオンにします。

Chrome メニュー アイコンをクリックし、[ツール] メニューから [拡張機能] を選択します。右上の [デベロッパー モード] チェックボックスがオンになっていることを確認します。拡張機能を再読み込みしたり、ファイルがパッケージ化された拡張機能のように展開されたディレクトリを読み込むことができるようになりました。完全なチュートリアルについては、スタートガイドをご覧ください。

Chrome の拡張機能の作成にはどのような技術が使用されていますか?

拡張機能は、デベロッパーがウェブサイトの作成に使用するのと同じ標準のウェブ技術を使用して作成されます。HTML はコンテンツ マークアップ言語、CSS はスタイル設定、JavaScript はスクリプトに使用されます。Chrome は HTML5 と CSS3 をサポートしているため、デベロッパーはキャンバスや CSS アニメーションなど、最新のオープンウェブ技術を拡張機能で使用できます。拡張機能では、複数の JavaScript API にアクセスでき、JSON エンコードやブラウザの操作などの機能を実行できます。

ブラウザが読み込まれるたびにウェブから拡張機能を取得するのですか?

拡張機能は、インストール時に Chrome ブラウザによってダウンロードされ、パフォーマンスを高速化するためにローカル ディスクから実行されます。ただし、新しいバージョンの拡張機能がオンラインにプッシュされた場合、拡張機能をインストールしているユーザーに対して、バックグラウンドで自動的にダウンロードされます。また、拡張機能は、ウェブサービスとやり取りしたり、ウェブから新しいコンテンツを pull したりするために、いつでもリモート コンテンツをリクエストする場合があります。

どのバージョンの Chrome がどのチャンネルにデプロイされているかを確認するにはどうすればよいですか?

各プラットフォームで現在使用できる Chrome のバージョンを確認するには、omahaproxy.appspot.com にアクセスしてください。そのサイトでは、次のような形式でデータが表示されます。

cf,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,canary,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####

各行は、プラットフォームとチャネルのさまざまな組み合わせに関する情報を表します。該当するプラットフォームは、cf(Google Chrome Frame)、linuxmacwincros(Google ChromeOS)です。一覧表示されるチャンネルは canarydevbetastable です。チャネルの後の 2 つの数字は、プラットフォームとチャネルの組み合わせにデプロイされた Chrome の現在のバージョンと以前のバージョンを表しています。残りの情報は、リリースが最初にプッシュされたタイミングに関するメタデータと、各ビルドに関連付けられているリビジョン番号です。

機能

拡張機能でクロスドメイン Ajax リクエストを行うことはできますか?

はい。拡張機能は、クロスドメイン リクエストを行うことができます。詳しくは、こちらのページをご覧ください。

拡張機能でサードパーティのウェブサービスを使用できますか?

はい。拡張機能では、クロスドメインの Ajax リクエストを行うことが可能で、リモート API を直接呼び出すことができます。JSON 形式でデータを提供する API は、特に簡単に使用できます。

拡張機能で JSON データのエンコード/デコードは可能ですか?

はい。V8(Chrome の JavaScript エンジン)は JSON.stringify と JSON.parse をネイティブにサポートしているため、こちらの説明を参照して、コードに JSON ライブラリを追加しなくても、これらの関数を拡張機能で使用できます。

拡張機能はデータをローカルに保存できますか?

はい。拡張機能では、localStorage を使用して文字列データを永続的に保存できます。Chrome の組み込みの JSON 関数を使用すると、複雑なデータ構造を localStorage に保存できます。保存されたデータに対して SQL クエリを実行する必要がある拡張機能向けに、Chrome ではクライアント側の SQL データベースも実装しています。

拡張機能で OAuth を使用できますか?

はい。OAuth を使用してリモートデータ API にアクセスする拡張機能があります。ほとんどのデベロッパーは、OAuth リクエストの署名プロセスを簡素化するために JavaScript OAuth ライブラリを使用すると便利です。

拡張機能はレンダリングされたウェブページの外部で UI を作成できますか?

はい。Chrome ブラウザのユーザー インターフェースに、その拡張機能でボタンが追加されることがあります。詳しくは、ブラウザ操作ページ操作をご覧ください。

また、ブラウザのウィンドウ外にあるポップアップ通知を作成する場合もあります。詳しくは、デスクトップ通知のドキュメントをご覧ください。

拡張機能で Chrome のタブやナビゲーション ボタンのクリックをリッスンできますか?

いいえ。拡張機能のリッスンは、API ドキュメントに記載されているイベントに限定されます。

2 つの拡張機能は相互に通信できますか?

はい。拡張機能は他の拡張機能にメッセージを渡すことができます。詳細については、メッセージの受け渡しに関するドキュメントをご覧ください。

拡張機能で Google アナリティクスを使用できるか

はい。拡張機能はウェブサイトとほとんど同じであるため、Google アナリティクスを使用して使用状況を追跡できます。ただし、Google アナリティクス ライブラリの HTTPS バージョンを取得するようトラッキング コードを変更する必要があります。詳しい手順については、こちらのチュートリアルをご覧ください。

拡張機能で chrome:// の URL を変更できますか?

いいえ。拡張機能 API は、ブラウザの新しいバージョンがプッシュされたときに発生する可能性がある下位互換性の問題を最小限に抑えるように設計されています。chrome:// の URL でコンテンツ スクリプトを許可すると、デベロッパーはこれらのページの DOM、CSS、JavaScript に依存することになります。これらのページは、現在更新中のページよりもすばやく更新できないことが最善でした。 最悪のケースでは、いずれかのページを更新すると拡張機能が動作しなくなり、その拡張機能を使用するユーザーはブラウザの重要な部分が動作しなくなる可能性があります。

そのような URL でホストされているコンテンツを完全に置き換えることが許可される理由は、拡張機能のデベロッパーがブラウザの内部実装に依存せずに必要なすべての機能を実装する必要があるためです。

拡張機能で、ユーザーの操作なしでブラウザやページ操作のポップアップを開くことはできますか?

いいえ。ポップアップは、対応するページまたはブラウザのアクションをユーザーがクリックした場合にのみ開くことができます。拡張機能は、そのポップアップをプログラムで開くことはできません。

ユーザーがポップアップをクリックした後も、拡張機能でそのポップアップを開いたままにできますか?

いいえ。ユーザーがブラウザ上でポップアップ以外の部分にフォーカスすると、ポップアップは自動的に閉じます。ユーザーがクリックした後にポップアップを開いたままにする方法はありません。

拡張機能がインストールまたはアンインストールされたときに通知を受け取ることはできますか?

runtime.onInstalled イベントをリッスンすることで、拡張機能がインストールまたは更新されたとき、または Chrome 自体が更新されたときに通知を受け取ることができます。拡張機能のアンインストールに対応するイベントはありません。

開発

拡張機能の UI を作成するにはどうすればよいですか?

拡張機能では、HTML と CSS を使用してユーザー インターフェースを定義するため、ウェブページの場合と同様に、標準のフォーム コントロールを使用して UI を作成したり、CSS でインターフェースのスタイルを設定したりできます。また、拡張機能によって、制限された UI 要素が Chrome 自体に追加される場合があります。

localStorage に保存できるデータ量はどれくらいですか?

拡張機能では、localStorage に最大 5 MB のデータを格納できます。

アプリケーションのオプション メニューを作成するにはどうすればよいですか?

オプション ページを作成することで、ユーザーが拡張機能のオプションを設定できるようになります。オプション ページとは、ユーザーが拡張機能の [オプション] ボタンをクリックしたときに読み込まれるシンプルな HTML ページです。このページでは、localStorage に設定を読み書きできます。また、ブラウザ間で保持されるようにオプションをウェブサーバーに送信することもできます。

拡張機能のデベロッパーはどのようなデバッグツールを使用できますか?

Chrome の組み込みのデベロッパー ツールを使用して、拡張機能やウェブページをデバッグできます。詳細については、拡張機能のデバッグのチュートリアルをご覧ください。

トップレベル ドメイン(TLD)でワイルドカード一致が機能しないのはなぜですか?

http://google.*/* などのワイルドカード一致パターンを使用して TLD を照合することはできません(http://google.eshttp://google.fr など)。実際には、一致対象を目的のドメインのみに制限するのは複雑なためです。

たとえば http://google.*/* の場合、Google ドメインが照合されますが、http://google.someotherdomain.com が一致します。また、多くのサイトはドメインの TLD をすべて所有しているわけではありません。たとえば、http://example.*/* を使用して http://example.comhttp://example.es を一致させたいものの、http://example.net は敵対的なサイトであるとします。拡張機能にバグがある場合、悪意のあるサイトが、拡張機能のより高い権限にアクセスするために、拡張機能を攻撃する可能性があります。

拡張機能を実行する TLD を明示的に列挙する必要があります。

拡張機能のインストールやアンインストール時に Management API でイベントが発生しないのはなぜですか?

Management API は、新しいタブページに代わる拡張機能の作成を容易にするために設計された API です。これは、現在の拡張機能のインストール イベントまたはアンインストール イベントを送信することを意図していませんでした。

拡張機能が初めて実行されているかどうかをどのように判断するのですか?

runtime.onInstalled イベントをリッスンできます。こちらのよくある質問をご覧ください。

機能とバグ

バグを見つけたようです。確実に修正するにはどうすればよいですか?

拡張機能の開発中に、拡張機能のドキュメントと一致しない動作が見つかった場合や、Chrome のバグが原因である可能性があります。最善の対応は、適切な問題報告を提出し、Chromium チームがその動作を再現するのに十分な情報を提供することです。

以下の手順に沿って進めてください。

  1. 報告する問題を示す必要最小限のテスト用の拡張機能を用意します。この拡張機能では、バグを示すためにコードをできるだけ少なくする必要があります。一般的には 100 行以下にします。多くの場合、この方法では問題を再現できません。これは、バグが自分のコードにあることを示します。
  2. http://crbug.com で Issue Tracker を検索して、他のユーザーが同様の問題を報告していないか確認してください。拡張機能に関する問題のほとんどは component=Platform>Extensions に保存されています。たとえば、chrome.tabs.executeScript 関数に関連する拡張機能のバグを探すには、「component=Platform>Extensions Type=Bug chrome.tabs.executeScript」を検索すると結果のリストが表示されます。
  3. 問題を説明するバグが見つかった場合は、スターアイコンをクリックして、そのバグの最新情報が通知されるようにします。バグに対して「私も」や「いつ修正される?」と質問したりしないでください。このような更新を行うと、数百通のメールが送信されます。コメントは、役立つと思われる情報(適切なテストケースや修正の提案など)がある場合にのみ追加してください。
  4. スターを付ける適切なバグが見つからなかった場合は、http://crbug.com/new から新しい問題を報告してください。 このフォームに記入する際には、できるだけわかりやすく記述してください。わかりやすいタイトルを付け、バグを再現する手順を説明し、予想される動作と実際の動作を記述します。テストサンプルをレポートに添付し、必要に応じてスクリーンショットを追加します。他のユーザーが問題を再現しやすいように報告すればするほど、バグが迅速に修正される可能性が高くなります。
  5. バグが更新されるのを待ちます。新しいバグのほとんどは 1 週間以内にトリアージされますが、アップデートにさらに時間がかかることもあります。問題がいつ修正されるかを尋ねるために、バグに返信しないでください。2 週間経ってもバグが変更されない場合は、バグへのリンクを記載したメッセージをディスカッション グループに投稿してください。
  6. 最初にディスカッション グループでバグを報告し、このよくある質問のエントリに誘導された場合は、元のスレッドに返信して、スターを付けたバグまたは報告したバグへのリンクを記載してください。これにより、同じ問題を経験している他のユーザーが正しいバグを簡単に見つけられるようになります。

機能リクエストがある。どこに報告すればよいですか?

拡張機能の開発エクスペリエンスを向上させるために追加できる機能(特に試験運用版の API に関連する機能)を特定したら、Issue Tracker で適切なリクエストを提出してください。

以下の手順に沿って進めてください。

  1. http://crbug.com で Issue Tracker を検索して、他のユーザーが同様の機能をリクエストしていないか確認します。拡張機能に関するリクエストの大半は component=Platform > Extensions にまとめられています。たとえば、キーボード ショートカットに関連する拡張機能リクエストを探すには、「component=Platform>Extensions Type=Feature shortcuts」を検索すると結果のリストが表示されます。
  2. リクエストに一致するチケットが見つかった場合は、スターアイコンをクリックして、バグが更新情報を受け取ると通知されます。バグに対して「私も」や「いつ実装されるの?」と質問しないでください。このような更新を行うと、数百通のメールが送信されます。
  3. スターを付ける適切なチケットが見つからなかった場合は、http://crbug.com/new で新しいリクエストを送信してください。このフォームに記入する際は、できる限り詳しく記入してください。わかりやすいタイトルを付け、機能の目的と用途を正確に記載してください。
  4. チケットが更新されるまで待ちます。新しいリクエストは通常 1 週間以内にトリアージされますが、更新にさらに時間がかかることもあります。サポート チケットに返信して、この機能がいつ追加されるかを質問しないでください。2 週間経ってもチケットが変更されない場合は、リクエストへのリンクを記載したメッセージをディスカッション グループに投稿してください。
  5. 最初にディスカッション グループでリクエストをレポートし、このよくある質問のエントリに誘導された場合は、元のスレッドに返信し、スターを付けた、または開いたチケットへのリンクを記載してください。これにより、同じリクエストを行う他のユーザーは正しいチケットを簡単に見つけることができます。