39

Chrome拡張機能を作成していますが、その一部で、ポップアップページのボタンがクリックされたときに現在のタブのタイトルとURLを取得する必要があります。

私は以前にChromeのメッセージパッシングシステムを使用していましたが、多くの場合、それを機能させることができました。しかし、私はポップアップページでそれらを使用する必要はありませんでした。私が読んだことから、それを行うのははるかに困難です。

私がこれまでに理解できたタイムラインは次のとおりです。

  1. popup.html/ popup.js:ボタンがクリックされた
  2. popup.html/ popup.js:リクエスト/メッセージがコンテンツスクリプトに送信されます
  3. contentScript.js:ポップアップページからリクエスト/メッセージを受信
  4. contentScript.js:現在のタブのタイトルとURLは変数に保存されます
  5. contentScript.js:2つの変数は文字列化された応答として送信されます
  6. popup.html/ popup.js:2つの変数が応答から解析されます

通常、私はこれを理解することができますが、私は作品にスパナを投げたいくつかのことを読みました。

  • chrome.tabs.getSelectedバックグラウンドページ/スクリプトでのみ使用できます。これは、コンテンツスクリプトをまったく使用する必要がないことを意味しますか?
  • メッセージをコンテンツスクリプトからポップアップページに直接送信することはできません。メッセージはバックグラウンドページを経由する必要があります。
  • メッセージを渡す前に、ポップアップウィンドウが存在することを確認する必要があります(ただし、これを行う方法は知っていると思います)

Chromeのメッセージパッシングシステムはすでに十分に難しいと感じましたが、これは私を完全に混乱させました。したがって、この投稿。

4

1 に答える 1

95

chrome.tabs.getSelected非推奨です。chrome.tabs.query代わりに使用する必要があります。

chrome.tabs.query2つのパラメーターが必要です。クエリオブジェクトと、結果のタブの配列をパラメーターとして受け取るコールバック関数です。

現在アクティブで現在のウィンドウにあるすべてのタブを照会することにより、「現在のタブ」を取得できます。

var query = { active: true, currentWindow: true };

クエリは現在のタブのみを含むTab配列を返すため、コールバックの最初の要素を必ず取得してください

function callback(tabs) {
  var currentTab = tabs[0]; // there will be only one in this array
  console.log(currentTab); // also has properties like currentTab.id
}

Etvoilà:

chrome.tabs.query(query, callback);
于 2014-06-06T00:19:39.793 に答える