「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > コンテンツ スクリプトを構築するための初心者ガイド

コンテンツ スクリプトを構築するための初心者ガイド

2024 年 7 月 29 日に公開
ブラウズ:626

ブラウザ拡張機能は、サイトに美しさを加え、最適なユーザー エクスペリエンスを提供するために使用されるブラウザのアドオンです。
拡張機能開発におけるコンテンツ スクリプトの概念は、ブラウザ拡張機能の使用例を大幅に拡張するため、開発者にとって同様に習得すべき非常に役立つ知識です。

この記事は、コンテンツ スクリプトとは何か、およびその仕組みを紹介することを目的としています。 Chrome 拡張機能の基本について説明し、拡張機能で簡単なコンテンツ スクリプトを使用するデモ プロジェクトもあります。それでは始めましょう。

コンテンツスクリプトを理解する

まずコンテンツスクリプトとは何でしょうか? コンテンツ スクリプトは、ブラウザ拡張機能を介して Web ページと対話するときに実行され、Web ページを変更する JavaScript コードです。

これは、Web ページのドキュメント オブジェクト モデルと対話することで簡単に実現できます。 Web ページのドキュメント オブジェクト モデルは、指定された Web ページの生の構造です。 Chrome コンテンツ スクリプトが問題の Web ページを変更する方法は、通常、インジェクションと呼ばれます。

コンテンツ スクリプトについて簡単に説明した後、それを Web ページに実装していきます。しかし、その前に、スクリプトを実行するブラウザ拡張機能をセットアップする必要があります。

Chrome 拡張機能のセットアップ

Chrome 拡張機能ファイルのセットアップは非常に簡単です。拡張機能の構築に関する詳細については、Chrome 拡張機能のドキュメント ページへのリンクを以下に添付します。
理想的な Chrome 拡張機能には、Chrome 拡張機能に関するデフォルトの背景情報を提供する詳細なmanifest.json ファイルが含まれている必要があります。
また、実行する適切な JS ファイルも含まれています。他の追加ファイル (HTML および CSS) は、拡張機能に美しさを与えるのに役立ちます。
これで、コンテンツ スクリプト インジェクションを組み込んだ拡張機能の構築に進みましょう。移動先のアクティブな Web ページにボタンをオーバーレイして表示する Chrome 拡張機能を作成することで、コンテンツ スクリプトの威力を説明します。

マニフェストファイルの書き込み

このセクションでは、マニフェスト ファイルの各部分に焦点を当てて説明します。これは、プロジェクトのマニフェスト ファイルのコードです。

{
    "manifest_version": 3,
    "name": "Add Button",
    "version": "1.0",
    "description": "An extension that alerts a response when clicked",
    "permissions": ["activeTab"],
    "content_scripts": [
{
        "matches": [""],
        "js": ["ContentScript.js"],
        "CSS": ["Button.css"]
}
]
}

マニフェスト バージョン: 通常、マニフェスト バージョンが要求されます。デフォルトでは、バージョン 2 よりも大幅に優れたアップグレードであるため、3 に設定されています。
Name: 拡張機能の名前もマニフェスト ファイルに入力されます。私の場合、プロジェクトの名前は「追加ボタン」です​​。ユーザーの好みに合わせて微調整できます。
Chrome 拡張機能のバージョンも入力します。私たちの場合、これは拡張機能の最初のバージョンであるため、1.0 という名前が付けられています。この拡張機能のその後の改良により、ファイルを変更してそれぞれバージョンを上げることが求められる場合があります。
説明: 拡張機能の機能の説明は、拡張機能の技術者以外のユーザーに Chrome 拡張機能の信頼性を与えることにもなります。

その後に挙げられた点は、コンテンツ スクリプトを構築する上で非常に説得力があります。

権限オブジェクトは、コンテンツ スクリプトの実行ルートを強調表示します。これにより、コンテンツ スクリプトが予期しないタブや Web ページで実行されることも防止されます。これにより、Chrome 拡張機能が必要とする可能性のあるすべての権限をリストすることができます。一部の Chrome 拡張機能では、ブラウザ ストレージ、他の Chrome API、および問題の一部のサイトにアクセスする必要がある場合があります。このプロジェクトの場合、Chrome 拡張機能を使用中のアクティブなブラウザ タブのみに制限します。 Chrome 拡張機能が Chrome ブラウザの他の未使用部分を侵害するリスクを軽減するには、これを適切に設定することが重要です。

次に、マニフェスト ファイルのコンテンツ スクリプト フィールドを構成します。
コンテンツ スクリプト フィールドでは、Web ページに挿入するさまざまなコード ファイルを指定します。
これには、処理対象となる Web ページ URL を指定するmatches サブフィールドが含まれています。 使いやすさを考慮して、アクセスするすべての Web ページでこれが機能できるように、すべての URL を含めただけです。ただし、サブフィールド値に挿入する URL を指定することはできます。例: www.google.com、

"matches": ["https://*.google.com/*"]
run_at": "document_idle

インジェクションコードを含むJSファイルも指定します。私たちの場合には、
JS ファイルの名前は Content script.js です。このプロジェクトのスタイル設定に使用される CSS ファイルも指定しました。

これで、プロジェクトのマニフェスト ファイルのミニチュア実装が完了しました。その後、後続のセクション

でインジェクション コードを記述します。

コンテンツスクリプトの作成

物事をシンプルにするという精神で、クリックすると警告メッセージが表示されるシンプルなボタンを作成します。このボタンは既存の Web ページにオーバーレイされることが想定されています。
以下のコードです

// Create a button element
const button = document.createElement("button");

// Set the button's text content
button.textContent = "Click me";

// Set the button's ID
button.id = "clickMe";

// Append the button to the document body
document.body.appendChild(button);

// Add a click event listener to the button
button.addEventListener("click", () => {
  // Show an alert when the button is clicked
  alert("Click event listener was added");

  // Log a message to the console
  console.log("Hello world");
});

スタイルは好みに合わせて変更できますが、スタイル テンプレートがコード リポジトリに含まれています。

これがその実装の写真です。

chrome extension
コード スタイルを含むソース コードへのリンクは次のとおりです。

高度な技術と使用例

これまでのところ、プロジェクトは完了しています。ただし、知識を深めていただくために、コンテンツ スクリプトの構築時に実装できる高度なテクニックとベスト プラクティスをいくつか紹介します。

  • ブラウザのバックグラウンド スクリプトとの相互作用
  • 動的スクリプトを可能にするデータ状態マネージャーの実装
  • 他の外部 API を統合すると、データの操作と分析が可能になります
  • 拡張機能のパフォーマンスを最適化するためにキャッシュ戦略を採用する
  • コンテンツ スクリプトと Service Worker の統合

結論

私のブログで私と交流したり、ここで私の他の記事をチェックしたりすることもできます。次回までコーディングを続けてください!

リリースステートメント この記事は次の場所に転載されています: https://dev.to/oluwatobi2001/a-beginners-guide-to-building-content-scripts-df?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>
  • return ステートメントの配置は For ループの機能にどのような影響を与えますか?
    return ステートメントの配置は For ループの機能にどのような影響を与えますか?
    For ループ内の Return ステートメントの配置この特定のケースでは、make_list 関数内に return ステートメントを配置すると、プログラムの意図した機能が妨げられます。 。 return ステートメントは、for ループ内ではなく、関数の最後に配置する必要があります。for ルー...
    プログラミング 2024 年 11 月 2 日に公開
  • Git LFS を使用して大きなファイルを Git リポジトリにプッシュする方法
    Git LFS を使用して大きなファイルを Git リポジトリにプッシュする方法
    最近、高解像度のアセットを扱う必要があるプロジェクトに取り組んでいましたが、その結果、サイズが大きくなってしまいました。ファイルをリポジトリにプッシュできませんでした。試行すると必ず次のエラーが表示されました: リモート: エラー: ファイル file.csv は 182.47 MB​​ です。これ...
    プログラミング 2024 年 11 月 2 日に公開
  • もうプレプテンバーですか?
    もうプレプテンバーですか?
    皆さんおはようございます、MonDEV おめでとうございます ☕ 私たちは本格的に戻ってきており、9 月に PC に戻るのが良い理由の 1 つはプレプテンバーです! 初期の頃からニュースレターをフォローしている人や、オープンソースの世界をフォローしている人はすでに知っていると思いますが、10 月には...
    プログラミング 2024 年 11 月 2 日に公開
  • 間違って配置された return ステートメントが for ループ内でプログラムの早期終了を引き起こすのはなぜですか?
    間違って配置された return ステートメントが for ループ内でプログラムの早期終了を引き起こすのはなぜですか?
    for ループの Return ステートメントが間違っているこのプログラミングの問題では、ユーザーは 3 匹の動物に対するユーザー入力を可能にするプログラムを作成する際に困難に遭遇します。 。このプログラムは、名前、動物の種類、年齢を含むペット オブジェクトをリストに追加するように設計されています。...
    プログラミング 2024 年 11 月 2 日に公開
  • 項目 他の型の方が適している場合は文字列を避ける
    項目 他の型の方が適している場合は文字列を避ける
    1.他のデータ型の代わりに文字列を使用することは避けてください: 文字列はテキストを表すように設計されていますが、数値、列挙型、または集合構造を表すために誤用されることがよくあります。 データが本質的に数値である場合は、String. ではなく、int、float、BigInteger などの型を...
    プログラミング 2024 年 11 月 2 日に公開
  • sync.WaitGroup を使用して Go 同時実行でデッドロックを防ぐ方法
    sync.WaitGroup を使用して Go 同時実行でデッドロックを防ぐ方法
    ゴルーチンのデッドロックの解決このシナリオでは、Go 同時実行コードでデッドロック エラーが発生しました。問題を詳しく調べて、効率的な解決策を提供しましょう。このエラーは、プロデューサとコンシューマの動作の不一致が原因で発生します。プロデューサー関数に実装されたプロデューサーは、限られた期間、チャネ...
    プログラミング 2024 年 11 月 2 日に公開
  • テキスト ファイル内の Unicode テキストを処理する方法: エラーのない書き込みのための完全ガイド
    テキスト ファイル内の Unicode テキストを処理する方法: エラーのない書き込みのための完全ガイド
    テキスト ファイル内の Unicode テキスト: エラーのない記述のための包括的なガイドGoogle ドキュメントから抽出されたデータのコーディングは、特に困難な場合があります。 HTML で使用するために変換する必要がある非 ASCII シンボルが見つかった場合。このガイドでは、Unicode ...
    プログラミング 2024 年 11 月 2 日に公開
  • EchoAPI と不眠症: 実践例による包括的な比較
    EchoAPI と不眠症: 実践例による包括的な比較
    フルスタック開発者として、私は API のデバッグ、テスト、文書化のための一流のツールを用意することがいかに重要であるかを知っています。 EchoAPI と Insomnia は 2 つの傑出したオプションであり、それぞれに独自の特徴と機能があります。これらのツールについて説明し、その機能と利点を比...
    プログラミング 2024 年 11 月 2 日に公開
  • 移動時間と所要時間 |プログラミングチュートリアル
    移動時間と所要時間 |プログラミングチュートリアル
    導入 このラボは、Go の時間と期間のサポートについての理解をテストすることを目的としています。 時間 以下のコードには、Go で時間と期間を操作する方法の例が含まれています。ただし、コードの一部が欠落しています。あなたの仕事は、コードを完成させて期待通りに動作させ...
    プログラミング 2024 年 11 月 2 日に公開
  • ホイスティングにおける面接の質問と回答
    ホイスティングにおける面接の質問と回答
    1. JavaScript におけるホイスティングとは何ですか? 答え: ホイスティングは、変数や関数にメモリが割り当てられる実行コンテキストの作成フェーズ中のプロセスです。このプロセス中に、変数用のメモリが割り当てられ、変数には未定義の値が割り当てられます。関数の場合、関数定義全...
    プログラミング 2024 年 11 月 2 日に公開
  • JavaScript のドキュメント オブジェクト モデル (DOM) を理解する
    JavaScript のドキュメント オブジェクト モデル (DOM) を理解する
    こんにちは、素晴らしい JavaScript 開発者の皆さん? ブラウザは、スクリプト (特に JavaScript) が Web ページのレイアウトと対話できるようにするドキュメント オブジェクト モデル (DOM) と呼ばれるプログラミング インターフェイスを提供します。 We...
    プログラミング 2024 年 11 月 2 日に公開
  • SPRING BATCH でプログラミングを始める
    SPRING BATCH でプログラミングを始める
    Introduction Dans vos projets personnels ou professionnels, Il vous arrive de faire des traitements sur de gros volumes de données. Le traite...
    プログラミング 2024 年 11 月 2 日に公開
  • CSS で Github プロフィールを目立たせる
    CSS で Github プロフィールを目立たせる
    これまで、Github プロフィールをカスタマイズできる唯一の方法は、写真を更新するか名前を変更することでした。これは、すべての Github プロファイルが同じに見え、カスタマイズしたり目立たせるためのオプションが最小限であることを意味しました。 それ以来、Markdown を使用してカスタム セ...
    プログラミング 2024 年 11 月 2 日に公開
  • TypeScript ユーティリティの種類: コードの再利用性の向上
    TypeScript ユーティリティの種類: コードの再利用性の向上
    TypeScript は、開発者が型を効果的に変換および再利用できるようにする組み込みのユーティリティ型を提供し、コードをより柔軟で ​​DRY にします。この記事では、TypeScript スキルを次のレベルに引き上げるのに役立つ、Partial、Pick、Omit、Record などの主要なユー...
    プログラミング 2024 年 11 月 2 日に公開
  • 電報 window.open(url, &#_blank&#); iOSでは動作がおかしい
    電報 window.open(url, &#_blank&#); iOSでは動作がおかしい
    電報ボットを作成していて、ミニアプリからチャットに情報を転送するオプションを追加したいと考えています。 window.open(url, '_blank'); を使用することにしました。 iPhone で試してみるまでは問題なく動作していました。転送の代わりに、Share を取得しま...
    プログラミング 2024 年 11 月 2 日に公開

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3