ホスト権限のユーザー コントロール: 移行ガイド

概要

変更内容

Chrome 70 以降では、ユーザーは、拡張機能ホストのアクセスをサイトのカスタムリストに制限したり、現在のページにアクセスする際にクリックを要求する拡張機能を設定したりできます。

影響を受ける API

この変更は、拡張機能のマニフェストで指定されたホスト権限の影響を受けるすべての API とコンテンツ スクリプトに影響します。ホスト権限が必要な API には、webRequestcookiestabs.executeScript()tabs.insertCSS() があります。また、XMLHTTPRequest API や fetch() API などを介したクロスオリジン リクエストの実行もあります。

アクセス制限

ユーザーがアクセスを制限するにはどうすればよいですか?

拡張機能は、クリック時、特定のサイト、リクエストされたすべてのサイトのいずれかで表示できます。これらのオプションは、chrome://extensions ページや拡張機能のコンテキスト メニューに表示されます。

クリック時、特定のサイト、すべてのサイトで拡張機能を実行するオプションを含む、ランタイム ホスト権限のコンテキスト メニュー コントロールのスクリーンショット。

ユーザーが拡張機能を「クリック」時に実行するよう選択した場合はどうなりますか?

基本的に、この拡張機能は activeTab 権限を使用した場合と同様に動作します。ユーザーが拡張機能をクリックしたホストが拡張機能からリクエストされた場合(chrome://settings などの制限付きサイトでない場合)、拡張機能にはそのホストへの一時的なアクセス権が付与されます。「クリック時に実行」に設定すると、Chrome の拡張機能に丸とドロップ シャドウ(以下を参照)のバッジが表示されます。これは、特定のサイトのアクセスをリクエストしていることを示します。

ツールバーの拡張機能アイコンに追加された Chrome のバッジのスクリーンショット

ユーザーが特定のサイトで拡張機能を実行するよう選択した場合はどうなりますか?

拡張機能は、ユーザーが選択した任意のサイトで自動的に実行され、追加のユーザー操作なしでサイトにアクセスできます。拡張機能がリクエストしたが、ユーザーが権限を付与していない他のサイトでは、ユーザーが拡張機能をクリックするように設定した場合と動作は同じです。

ユーザーがすべてのサイトで拡張機能を実行するよう選択した場合はどうなりますか?

この拡張機能は、マニフェストでリクエストされたサイトに自動的にアクセスできます。

API の動作

ウェブ リクエスト API

この拡張機能でも、アクセス権のあるサイトからのリクエストは傍受、変更、ブロックできます。拡張機能がアクセスしていないサイトの場合、Chrome は拡張機能にバッジを付けて、この拡張機能がページへのアクセスを要求していることを示します。ユーザーは拡張機能にアクセス権を付与できます。Chrome はユーザーにページの更新を促し、拡張機能がネットワーク リクエストをインターセプトできるようにします。

コンテンツ スクリプト、tabs.executeScript()、tabs.insertCSS()

この拡張機能では、アクセス権のあるサイトのスクリプトやスタイル シートを自動的に挿入できます。拡張機能がアクセスしていないサイトの場合、Chrome は拡張機能にバッジを付けて、その拡張機能がページへのアクセスをリクエストしていることを示します。ユーザーは拡張機能へのアクセスを許可できます。コンテンツ スクリプトが document_idle で挿入するように設定されている場合は、すぐに挿入されます。それ以外の場合、Chrome はページを更新するようユーザーに求めます。これにより、ページ読み込みの早い段階でスクリプトを挿入できます(document_start または document_end)。tabs.executeScript() メソッドと tabs.insertCSS() メソッドのコールバックは、ユーザーがサイトへのアクセスを許可した場合にのみ呼び出されます。

Cookie とバックグラウンド ページの XHR

この拡張機能では、引き続きアクセス可能なサイトに対して、Cookie の読み取りや変更、およびクロスオリジン XHR の実行を行えます。拡張機能ページに別のオリジンの Cookie にアクセスすることや、別のホストへの XHR にアクセスすることに関連付けられたタブがないため、Chrome は、拡張機能がサイトへのアクセスをリクエストしていることをユーザーに示すバッジにバッジを表示しません。別のサイトの Cookie にアクセスしようとしたり、クロスオリジン XHR を作成しようとすると、拡張機能のマニフェストにホスト権限が含まれていない場合と同様に、エラーが発生します。このような場合は、ユーザーがさまざまなサイトに対して実行時のアクセス権を付与できるように、オプションの権限を使用することをおすすめします。

次の例は、これが Cookie API でどのように機能するかを示しています。

プログラム開始前:

{
  ...
  "permissions": ["cookies", "https://example.com"]
}
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                    function(cookie) {
                      // Use the cookie.
                    });

申し込みの後:

{
  ...
  "permissions": ["cookies"],
  "optional_permissions": ["https://example.com"]
}
// Note: permissions.request() requires a user gesture, so this
// may only be done in response to a user action.
chrome.permissions.request(
    {origins: ['https://example.com']},
    function(granted) {
      if (granted) {
        chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                            function(cookie) {
                              // Use the cookie.
                            });
      } else {
        // Handle grant failure
      }
    });

移行

悪影響を受けないためのおすすめの方法を教えてください。

拡張機能では、オプションの権限activeTabdeclarativeContent の各 API を使用して、ベスト プラクティスを実践できます。オプションの権限は実行時に付与され、拡張機能がサイトへの特定のアクセスをリクエストできるようにします。activeTab 権限は影響を受けず、それを使用している拡張機能は引き続き正常に動作します。declarativeContent API を使用すると、すべてのページにスクリプトを挿入する必要がなくなります。

現在のユーザーの設定はどうなりますか?

この変更は、拡張機能に現在付与されている権限にすぐには影響しません。つまり、ユーザーがアクセスが許可されているサイトを制限しない限り、以前と同様に動作し続けます。Chrome の今後のリリースでは、ユーザーが設定を調整するためのコントロール項目が増える予定です。

拡張機能にサイト上での実行権限があるかどうかを確認するにはどうすればよいですか?

permissions.contains() API を使用すると、拡張機能に特定のオリジンに対するアクセス権が付与されているかどうかを確認できます。