Web拡張機能はコンテンツスクリプトを明示的にロードする必要がありますか?

lhk

簡単なWeb拡張機能を作成しようとしています。現在、私はさまざまなチュートリアルに従って、アーキテクチャを理解しようとしています。

特定のタブとの相互作用は、Webサイトのソースコードに挿入されたcontent_scriptsを使用して行われます。content_scriptsが自動的にロードされるように私には思えます:https//developer.mozilla.org/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Content_scripts

MDNチュートリアルでは、これがさらに明確になります。

このスクリプトは、content_scriptsmanifest.jsonキーで指定されたパターンに一致するページに読み込まれます。スクリプトは、ページ自体によってロードされるスクリプトと同じように、ドキュメントに直接アクセスできます。

私の拡張機能は、すべてのテキスト選択でコンテキストメニューを提供することになっています。出発点として、私はchromeの便利なサンプル拡張機能を見つけました。あなたはここでそれを見つけることができますhttps://developers.chrome.com/extensions/samples、それは「話す選択」と呼ばれています

この拡張機能は、ttsエンジンを使用して選択したテキストを読み取ります。しかし、ソースコードの一部は紛らわしいです。それらには、タブでcontent_scriptsを実行するための明示的な関数があります。このコードは、バックグラウンドスクリプトの1つでInit()関数の一部として実行されます。

function loadContentScriptInAllTabs() {
  chrome.windows.getAll({'populate': true}, function(windows) {
    for (var i = 0; i < windows.length; i++) {
      var tabs = windows[i].tabs;
      for (var j = 0; j < tabs.length; j++) {
        chrome.tabs.executeScript(
            tabs[j].id,
            {file: 'keycodes.js', allFrames: true});
        chrome.tabs.executeScript(
            tabs[j].id,
            {file: 'content_script.js', allFrames: true});
      }
    }
  });
}

私の知る限り、コードはブラウザが起動するとすぐに実行されます。それは冗長ではありませんか?

それらのmanifest.jsonがcontent_scriptの実行を処理する必要があります。関連するコードは次のとおりです。

"content_scripts": [
    {
      "matches": [
        "<all_urls>"
      ],
      "all_frames": true,
      "js": [
        "keycodes.js",
        "content_script.js"
      ]
    }
  ],

開いているすべてのタブにスクリプトを挿入する適切な方法は何ですか?

氏族長

簡単な答え:Chromeでは必要ですがFirefoxでは必要ありません。


Chrome、拡張機能の読み込み時にコンテンツスクリプトを一致するページに読み込みませ(初期読み込みだけでなく、拡張機能の更新も含まれます)。

したがって、(将来のナビゲーションではなく)拡張機能のロード時にタブのコンテンツスクリプト機能を開きたい場合は、このコード(または同様のもの)が必要です。

このコードは、で少し現代化できchrome.tabs.queryます。


Firefoxは、この点でのクロムと互換性がありません:それはありませんロード時に一致していることを、すべてのコンテンツのスクリプト注入自動的に。したがって、ブラウザの検出や1回限りのガードコードの挿入を使用する必要があります。

彼らがそれを重大な変化として紹介しなかったらいいのにと思います。移行を容易にするための動作を選択するためのマニフェストキーを少なくとも提供することは理にかなっています。


注:拡張機能のリロードシナリオでは、古いインスタンスのコンテンツスクリプトが引き続き存在します(ただし、拡張機能のAPIは失敗します)。それを優雅に処理するのはあなたの責任です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Chrome拡張機能のコンテンツスクリプトが実行されるiframeを一意に識別する方法はありますか?

分類Dev

インラインコマンドプロンプトを表示するWindowsエクスプローラー拡張機能はありますか?

分類Dev

chrome.runtime.sendMessageは、Chrome拡張機能をリロードした後、コンテンツスクリプトから例外をスローします

分類Dev

Chrome拡張機能のコンテンツスクリプトからWebワーカーを作成する

分類Dev

Chrome拡張機能のバックグラウンドスクリプトを手動でアンロードする方法はありますか?

分類Dev

Chrome拡張機能からローカルコンテンツを提供する際にキャッシュを利用するにはどうすればよいですか(または利用する必要がありますか)?

分類Dev

LDAP接続プーリングでコンテキストを明示的に閉じる必要がありますか

分類Dev

コンテンツセキュリティポリシーディレクティブにより、拡張機能はスクリプトのロードを拒否します

分類Dev

コンテンツスクリプトからバックグラウンドスクリプトにメッセージを送信すると、Chrome拡張機能が壊れます

分類Dev

コンテンツスクリプトがChrome拡張機能に読み込まれる前に、スタイルが間違ったコンテンツのフラッシュを回避するにはどうすればよいですか?

分類Dev

Chrome拡張機能のコンテンツスクリプトでイベントリスナーをGoogleスプレッドシートのリンクに追加するにはどうすればよいですか?

分類Dev

Chrome拡張機能:必要に応じてコンテンツスクリプトを呼び出す

分類Dev

コンテンツとサイドバーには、グリッドの配置を維持しながら背景を拡張する必要があります

分類Dev

C拡張機能からデフォルト以外の例外をスローするには、どのクラスエントリを使用する必要がありますか?

分類Dev

iOS拡張機能:バンドルバージョン(CFBundleVersion)をインクリメントする必要がありますか?

分類Dev

どのコンテンツをどのようにプリロードする必要がありますか?

分類Dev

ビューソースページのChrome拡張機能からコンテンツスクリプトを実行することは可能ですか?

分類Dev

Chrome拡張機能のコンテンツスクリプトとバックグラウンドスクリプトとは正確には何ですか?

分類Dev

32バイトや64バイトのようなサイズ制限はありますか?Chrome拡張機能のコンテンツスクリプトとバックグラウンドページ間でメッセージを渡すために?

分類Dev

AJAXコンテンツがロードされた後、複数のスクリプトをリロードする必要があります

分類Dev

通知サービス拡張と通知コンテンツ拡張用に別々のapns証明書を作成する必要がありますか?

分類Dev

Chrome拡張機能の開発で、background.jsからスクリプトノードとして埋め込まれたコンテンツスクリプトに変数を渡すにはどうすればよいですか?

分類Dev

cssのオプションのリストを表示するVSコード拡張機能はありますか?

分類Dev

Chrome拡張機能:コンテンツスクリプトエラーをグローバルにトラップ/処理する方法

分類Dev

ローカルストレージの価値をコンテンツスクリプトに取得する簡単な方法[Chrome拡張機能]

分類Dev

ドラッグイベントリスナーをChrome拡張機能(コンテンツスクリプト)でオーバーライドするにはどうすればよいですか?

分類Dev

Chrome拡張機能のコンテンツスクリプト-ユーザーがソースを確認できますか?

分類Dev

関数Base。+を拡張するには、明示的にインポートする必要があります

分類Dev

サイトがコピーアンドペーストを無効にしないようにするGreasemonkeyスクリプト(またはFirefox拡張機能)?

Related 関連記事

  1. 1

    Chrome拡張機能のコンテンツスクリプトが実行されるiframeを一意に識別する方法はありますか?

  2. 2

    インラインコマンドプロンプトを表示するWindowsエクスプローラー拡張機能はありますか?

  3. 3

    chrome.runtime.sendMessageは、Chrome拡張機能をリロードした後、コンテンツスクリプトから例外をスローします

  4. 4

    Chrome拡張機能のコンテンツスクリプトからWebワーカーを作成する

  5. 5

    Chrome拡張機能のバックグラウンドスクリプトを手動でアンロードする方法はありますか?

  6. 6

    Chrome拡張機能からローカルコンテンツを提供する際にキャッシュを利用するにはどうすればよいですか(または利用する必要がありますか)?

  7. 7

    LDAP接続プーリングでコンテキストを明示的に閉じる必要がありますか

  8. 8

    コンテンツセキュリティポリシーディレクティブにより、拡張機能はスクリプトのロードを拒否します

  9. 9

    コンテンツスクリプトからバックグラウンドスクリプトにメッセージを送信すると、Chrome拡張機能が壊れます

  10. 10

    コンテンツスクリプトがChrome拡張機能に読み込まれる前に、スタイルが間違ったコンテンツのフラッシュを回避するにはどうすればよいですか?

  11. 11

    Chrome拡張機能のコンテンツスクリプトでイベントリスナーをGoogleスプレッドシートのリンクに追加するにはどうすればよいですか?

  12. 12

    Chrome拡張機能:必要に応じてコンテンツスクリプトを呼び出す

  13. 13

    コンテンツとサイドバーには、グリッドの配置を維持しながら背景を拡張する必要があります

  14. 14

    C拡張機能からデフォルト以外の例外をスローするには、どのクラスエントリを使用する必要がありますか?

  15. 15

    iOS拡張機能:バンドルバージョン(CFBundleVersion)をインクリメントする必要がありますか?

  16. 16

    どのコンテンツをどのようにプリロードする必要がありますか?

  17. 17

    ビューソースページのChrome拡張機能からコンテンツスクリプトを実行することは可能ですか?

  18. 18

    Chrome拡張機能のコンテンツスクリプトとバックグラウンドスクリプトとは正確には何ですか?

  19. 19

    32バイトや64バイトのようなサイズ制限はありますか?Chrome拡張機能のコンテンツスクリプトとバックグラウンドページ間でメッセージを渡すために?

  20. 20

    AJAXコンテンツがロードされた後、複数のスクリプトをリロードする必要があります

  21. 21

    通知サービス拡張と通知コンテンツ拡張用に別々のapns証明書を作成する必要がありますか?

  22. 22

    Chrome拡張機能の開発で、background.jsからスクリプトノードとして埋め込まれたコンテンツスクリプトに変数を渡すにはどうすればよいですか?

  23. 23

    cssのオプションのリストを表示するVSコード拡張機能はありますか?

  24. 24

    Chrome拡張機能:コンテンツスクリプトエラーをグローバルにトラップ/処理する方法

  25. 25

    ローカルストレージの価値をコンテンツスクリプトに取得する簡単な方法[Chrome拡張機能]

  26. 26

    ドラッグイベントリスナーをChrome拡張機能(コンテンツスクリプト)でオーバーライドするにはどうすればよいですか?

  27. 27

    Chrome拡張機能のコンテンツスクリプト-ユーザーがソースを確認できますか?

  28. 28

    関数Base。+を拡張するには、明示的にインポートする必要があります

  29. 29

    サイトがコピーアンドペーストを無効にしないようにするGreasemonkeyスクリプト(またはFirefox拡張機能)?

ホットタグ

アーカイブ