4

私はクロム拡張機能のプログラミングが初めてで、これが私の最初の拡張機能です。

私が欲しいもの:今のところ、特定のhtmlタグが表示されている場合、ページに対してpageActionを実行したいと考えています。pageAction を実行するには、現在のタブの TabID を知る必要があるように思われるので、これを試してみましたが、うまくいきません (コード内のコメントを参照)。

manifest.json (私のマニフェストがどのように見えるかを示すためだけに、うまく動作します)

{
    "manifest_version":2,

    "name":"ExtensionName",
    "description":"Description",
    "version":"1.0",

    "page_action":{
        "default_icon":"icon.png",
    },
    "content_scripts":[
        {
            "matches":[
                "http://www.domain.com/page.aspx"
            ],
            "js":["searchTag.js"],
            "run_at":"document_idle",
            "all_frames":false
        }
    ]
}

searchTag.js (コードは多かれ少なかれ、背景ページから現在のタブ ID を取得する方法で Arithmomaniac の回答に似ています)

if (document.getElementById("idIWant")) {
    var currentTab;
    alert(currentTab);  //this works and gives an alert with "undefined"
    //now the alert in the function callback doesn't work
    chrome.tabs.query(
        {currentWindow: true, active: true},
        function(tabArray) {
            alert(tabArray[0].id);
            currentTab = tabArray[0].id;
        }
    )
}

では、私のコードの何が問題なのですか? chrome.tabs.query() を正しく使用していないようですが、表示されません。

4

1 に答える 1

7

searchTag.js は、 APIにアクセスできないコンテンツ スクリプト( https://developer.chrome.com/extensions/content_scripts.htmlchrome.tabs )です。コンテンツ スクリプトからバックグラウンド ページ ( https://developer.chrome.com/extensions/messaging.html ) にメッセージを送信し、バックグラウンド ページで chrome.tabs.query を呼び出す必要があります。例えば:

searchTag.js

if (document.getElementById("idIWant")) {
    chrome.runtime.sendMessage('showPageAction');
}

bg.js

var currentTab;

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  if (request == 'showPageAction') {
    chrome.tabs.query(
        {currentWindow: true, active: true},
        function(tabArray) {
            if (tabArray && tabArray[0])
                chrome.pageAction.show(tabArray[0].id);
        }
    );
    // sender will also contain the tab id so you can simply use
    // if (sender)
    //     chrome.pageAction.show(sender.tab.id);
  }
});

これをmanifest.jsonに追加します

"background": {
  "scripts": ["bg.js"],
  "persistent": true
},
于 2013-08-15T11:39:23.417 に答える