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:

由于语法错误,您的代码不起作用

需要考虑的几点:

  • 使用onMessage代替 onRequest(不推荐使用 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 回答