0

私は拡張機能を作成しようとしています:クロムのボタンをクリックするとポップアップウィンドウが起動し、そのポップアップウィンドウからボタンを押した時間に焦点を合わせた最初のタブから情報を取得したいと思います。

function onClick(tab) {
    var originalTab = tab,
        popupTab;
    chrome.windows.create(
        {
            url: chrome.extension.getURL('popup.html'),
            type: 'popup'
        },
        function (w) {
            w.getCurrent({populate: true}, function (win) {
                var popupTab = win.tabs[0];
                popupTab.insertCSS(null, {code: 'body {background:red;}'});
                //look now I have access to the original and popup tabs!!!
            });
        }
    );
}

chrome.browserAction.onClicked.addListener(onClick);

次のスクリプトを使用すると、実際には何も起こりません。

ボタンがクリックされた後に別のウィンドウを作成している場合、ウィンドウが作成されると、最初のタブが使用可能になります。この状況では、originalTab と popupTab の両方のインスタンスにアクセスできますが、残念ながら、これは起こっていることではありません。

このスクリプトが期待どおりに機能しない特定の理由はありますか?

前もって感謝します

4

1 に答える 1

0

コードの具体的な問題点はわかりませんが、別の方法で行いました。

ポップアップはマニフェストで指定されています。これは一般的には重要ではないかもしれませんが、イベント ハンドラーが行うべき唯一のことがポップアップを開くことである場合は、好ましい方法と思われます。これが事実です。

popup onload イベントには、似たようなハンドラーがあります。

function onLoad()
{
  chrome.windows.getCurrent(
  function(win)
  { 
    chrome.tabs.query({'windowId': win.id, 'active': true},
    function(tabArray)
    {
      // tabArray[0] - is the initially selected tab, so you may do...
      chrome.tabs.insertCSS(tabArray[0].id, {code: 'body {background:red;}'});
    }
  }
}
于 2012-11-20T20:23:35.037 に答える