web-dev-qa-db-ja.com

chrome拡張機能のバックグラウンドスクリプトとコンテンツスクリプトの違い

質問が言うように、私はchrome拡張子のバックグラウンドスクリプトとコンテンツスクリプトの違いを知りたいだけです。両方のスクリプトにchromeオブジェクトを記録すると、異なるオブジェクトが見つかりました。

使用事例

アイコンがクリックされたときにJavaScriptをページに挿入したいので、manifest.jsonにコンテンツスクリプトを追加しましたが、コンテンツスクリプト内のアイコンクリックイベントを聞くことができません。

chrome.browserActionは、コンテンツスクリプトのchromeオブジェクトで定義されていません。

質問

コンテンツスクリプトでクリックイベントを聞くにはどうすればよいですか。背景スクリプトとコンテンツスクリプトの両方を含めることはできますか?

これは私のmanifest.jsonです

{
  "name": "First Plugin Testing",    
  "version": "1.0",
  "manifest_version": 2,    
  "description": "Trying hands on first extension",
  "background": { "scripts": ["background.js"] },
  "browser_action": {
    "default_icon": "icon.png"
  },
  "permissions": [
    "tabs", "http://*/*", "https://*/*"
  ],
  "content_scripts": [
    {
      "matches": ["http://*/*"], 
      "js": ["temp.js"]
    }
  ]
}
24
sachinjain024

私は尋ねられた質問に対する答えを見つけました。

A.コンテンツスクリプトとバックグラウンドスクリプトの両方を含めることはできますか?

はい、マニフェストにバックグラウンドスクリプトとコンテンツスクリプトの両方を含めることができます。それらの間の相互作用を行うには、 ChromeメッセージパッシングAPI を使用できます。

私も同じようにやっていたのですが、バックグラウンドスクリプトにエラーがあり、見えなかったので、グーグルで検索してこの質問を投稿しました。

B.コンテンツスクリプトでクリックイベントを聞くにはどうすればよいですか?

解決策:コンテンツスクリプトにbrowser click eventを含めることはできません。 chromeオブジェクトへの部分的なアクセスしかありません。したがって、バックグラウンドスクリプトでクリックハンドラーを受信し、コンテンツスクリプトにメッセージを送信して、必要な操作を行う必要があります。

バックグラウンドスクリプトでchrome.browserAction.onClickedイベントを使用してから、 メッセージパッシング を使用して、ユーザーがアイコンをクリックしたコンテンツスクリプトに情報を送信します。

17
sachinjain024