2017-01-25 30 views
0

私はクロムエクステンションを見直しています。クロムエクステンションのイベントリスナーを設定する必要がありますか

chrome.tabs.query({active: !0, currentWindow: !0}, function (a) { 
chrome.tabs.sendMessage(a[0].id, {action: "process_page"}, function (a) { 
         }) 
        }) 
:私は検討しています拡張子で

、私は、メッセージは、コードの以下の行を使用してコンテンツのスクリプトに渡されている「background.js」ファイル内のコードの一部を見ることが

  1. 私の最初のクエリは、json-ifiedメッセージがここを通過することです({action: "process_page"})。メッセージのコードベース(process_page)のどこにでも、関連するリスナーイベントを見つけることができませんでした。実際、「process_page」はコードベース全体に1回だけ存在し、background.jsファイルにも存在しているようです。ですから、イベントリスナーがすべてのchrome.tabs.sendMessageメソッドで必須かどうか、またはイベントリスナーがオプションであるかどうかを知りたいと思っていました。

  2. 私の2番目のクエリは - Googleのchrome.tabsドキュメント - https://developer.chrome.com/extensions/tabs#type-Tabから、私はsendMessageメソッドの最初のパラメータがタブIDに対応していることを理解しました。しかし、なぜそれが "a [0] .id"として表されたのかを理解したいと思いますか?

明確なポインタまたは説明は本当に役立ちます。

+1

クロム探しは.runtime.onMessage、chrome.runtime.onConnect、および廃止予定の前任者chrome.extension.onRequest。その拡張機能は、内容に関係なくメッセージを処理しているようです。 – wOxxOm

+0

@wOxxOm返信ありがとうございます。 "明らかにその拡張機能はその内容に関係なく任意のメッセージを処理する"。 – mbvee

+0

U hm、それはちょうどそれを意味します。拡張機能は単にメッセージの実際の内容に気を配らず、メッセージが受信されたという事実、メッセージの送信者、またはこのコードが残っていて何もしません。 – wOxxOm

答えて

0
  1. イベントリスナーはオプションですが、リスナーがない場合、送信されるメッセージは無効です。関数の引数は、Tabオブジェクトの配列ですので

  2. は、documentation for chrome.tabs.queryを参照してください(a[0].idとして表現される。a[0].idは、クエリによって返される配列内の最初のタブのタブのIDである。

+2

すべてのリスナーが受信したすべてのメッセージを聞くように設定されていることを説明するには、#1を展開する必要があります。メッセージの内容を解読して、それが処理する方法を知っているかどうかを判断するのはリスナーに任されます(つまり、 'process_page'がコードのどこにもない理由を説明する)。 – Makyen

+0

詳細な説明をありがとうございます。さて、イベントリスナーのいずれかでメッセージを処理せずに、メッセージを空中に開いたままにしておくと、脆弱性が存在する可能性があると思いますか? – mbvee

+0

@Viman私には脆弱性はありませんが、必要なく引数として渡すオブジェクトを作成することは非効率的です。 –

関連する問題