19

サーバーに自動的にログインするための拡張機能を作成したいと思います。そこで、現在のURLを確認するためのバックグラウンドページを作成し、それが自分のURL正規表現に準拠している場合は、ページアクションアイコンを表示します。ページアクションをクリックすると、いくつかのフィールドを含むポップアップが開きます。現在開いているURLを取得し、ポップアップのフィールドの1つに入力する必要があります(標準のブックマークページアクションをクリックすると、開いたポップアップにURLが自動的に入力されます)。Chrome拡張機能でこのようなことをするにはどうすればよいですか?バックグラウンドページからポップアップHTMLへのメッセージパッシングを試しましたが、機能しません。そのようなメッセージを送ることは可能ですか?また、ポップアップhtmlファイルのonloadを設定しようとしましたが、トリガーされていないことに気付きました。このシナリオに対処するための適切な方法を提案してください。

4

2 に答える 2

47

chrome.tabs.query次のパラメータで使用します。

  • queryInfoオブジェクト:
    • active: true-アクティブなタブを取得するには
    • lastFocusedWindow: true-アクティブなウィンドウを選択するには
  • コールバック関数:
    この関数は1つの引数を受け取ります:一致したタブの配列。アクティブにできるウィンドウは1つだけであり、このウィンドウ内のタブは1つだけなので、配列には1つの要素しかありません。Tabこの要素は、署名を持つオブジェクトです。

コードスニペット:

// Do NOT forget that the method is ASYNCHRONOUS
chrome.tabs.query({
    active: true,               // Select active tabs
    lastFocusedWindow: true     // In the current window
}, function(array_of_Tabs) {
    // Since there can only be one active tab in one active window, 
    //  the array has only one element
    var tab = array_of_Tabs[0];
    // Example:
    var url = tab.url;
    // ... do something with url variable
});

これが機能するには、activeTab許可で十分です。

于 2012-05-02T15:54:15.807 に答える
4

また、Promiseを使用して、タブを取得するためのよりクリーンな方法を使用することもできます。

  getCurrentTab().then(function(tab){
    // Do something w/tab
  });

  function getCurrentTab(){
    return new Promise(function(resolve, reject){
      chrome.tabs.query({
        active: true,               // Select active tabs
        lastFocusedWindow: true     // In the current window
      }, function(tabs) {
        resolve(tabs[0]);
      });
    });
  }
于 2015-06-14T01:39:42.490 に答える