2

拡張機能が実行されているタブを、現在 2 番目のウィンドウで作業している場合でも、一致が見つかったらすぐにウィンドウの前面に表示したいと考えています。

これまでのところ、私のcontent_script.jsにこのコードがありますが、うまくいかないようです。コメントされた行は、最後に失敗した試行です。

アラートは私に-1を与えました。これはかなり奇妙なタブ ID のようです。

if(output == 'found') {
    sendResponse({findresult: "yes"});

    chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
        //chrome.tabs.update(sender.tab.id, {selected: true});
        //chrome.tabs.update(sender.tab.id, {active: true});
        alert(sender.tab.id);
    });
}

私もbackground.htmlでいくつかのことを試しましたが、すでにここに投稿されているすべての種類のものを試しましたが、すべてうまくいきませんでした。

これを機能させるにはどうすればよいですか?

編集

manifest.jsonスクリプトの組み込み

"background": {
    "scripts": ["background.js"]
},
"content_scripts": [ {
    "all_frames": false,
    "js": [ "jquery.js", "content_script.js" ],
    "matches": [ "http://*/*", "https://*/*" ],
    "run_at": "document_idle"
}

background.js (アラートは表示されません)

alert("here");

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    your_tab_Id = sender.tab.id);
});

chrome.tabs.update(your_tab_Id,{"active":true,"highlighted":true},function (tab){
    console.log("Completed updating tab .." + JSON.stringify(tab));
});

content_script.js jQuery の背景の変更 (sendResponse は機能しますが、背景を変更する行を有効にするとスクリプトが機能しなくなります)

if(found === true) {
            //$('td:contains('+foundItem+')').css("background", "greenyellow");
            sendResponse({findresult: "yes"});
        }

jsFiddle で jQuery コードをテストしました

EDIT 2 拡張機能のダウンロード

4

1 に答える 1

2

コンテンツ スクリプトからchrome.tabs API() を使用することはできません

参考文献

タブIDを取得するには、コードをbackground.js

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
        your_tab_Id = sender.tab.id);
});

これをbackground.jsページに追加します

chrome.tabs.update(your_tab_Id,{"active":true,"highlighted":true},function (tab){
  console.log("Completed updating tab .." + JSON.stringify(tab));
});

コンテンツ スクリプトのみを使用してメッセージを送信する

chrome.extension.sendMessage("Awesome message");

編集1:

構文エラーのため、コードが機能しません

考慮すべき点:

  • onRequest の代わりにonMessageを使用します(onRequest は onMessage を支持して廃止されます)
  • 使用されるすべての API は非同期であるため、同期的に呼び出されるようにしてください。
  • コンテンツ スクリプトでも使用sendMessageします (sendRequest は非推奨であり、sendMessage が優先されます)。

上記の変更を適用すると、コードは次のようになります。

alert("here");

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
    your_tab_Id = sender.tab.id;
    chrome.tabs.update(your_tab_Id,{"active":true,"highlighted":true},function (tab){
        console.log("Completed updating tab .." + JSON.stringify(tab));
    });
});

さらに情報が必要な場合はお知らせください。

于 2012-12-21T11:50:17.283 に答える