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

概要

変更内容

Chrome 70 以降、ユーザーは拡張機能のホストへのアクセスを、 クリックしないと現在のページにアクセスできないように拡張機能を設定したりできます。

影響を受ける API

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

アクセス制限

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

ユーザーは、クリック時、特定のサイトセット、またはすべてのサイトで拡張機能の実行を許可できます。 できます。これらのオプションは、chrome://extensions ページだけでなく、ユーザーにも表示されます。 拡張機能のコンテキスト メニューに表示されます。

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

ユーザーが広告表示オプションを「クリック時」で実行することを選択するとどうなりますか?

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

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

ユーザーが特定のサイトで拡張機能を実行することを選択するとどうなりますか?

拡張機能はユーザーが選択したすべてのサイトで自動的に実行され、 サイトに再度アクセスします拡張機能をリクエストしたがユーザーが行っていない他のサイト ユーザーが拡張機能をクリックしたときに実行するように設定した場合と同じです。

ユーザーがすべてのサイトで拡張機能を実行することを選択するとどうなりますか?

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

API の動作

ウェブ リクエスト API

この拡張機能は、アクセス権を持つサイトからのリクエストをインターセプト、変更、ブロックできます。対象 その拡張機能がアクセスできないサイトにアクセスしている場合は、 拡張機能がページへのアクセスをリクエストします。ユーザーは拡張機能へのアクセスを許可できます。Chrome の次に 拡張機能がネットワーク リクエストをインターセプトできるように、ページを更新するようユーザーに促します。

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

この拡張機能は引き続き、アクセス可能なサイトに対してスクリプトやスタイルシートを自動的に挿入できます。 できます。拡張機能がアクセスできないサイトについては、 拡張機能がページへのアクセスをリクエストします。ユーザーは拡張機能へのアクセスを許可できます。もし コンテンツ スクリプトが 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 は、多くのニーズに置き換わる API すべてのページにスクリプトを挿入できます

現在のユーザーの?

この変更は、拡張機能に現在付与されている権限にすぐには影響しません。つまり ユーザーがアクセス対象のサイトを制限しない限り、以前と同様に機能します。 許可します。今後のリリースでは、Chrome でより細かく調整できる機能が提供される予定です。 設定。

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

permissions.contains() API を使用すると、拡張機能が アクセスが許可されます。