如何在找到结果时激活标签和窗口?

时间:2012-12-21 11:29:34

标签: google-chrome-extension tabs

我想在找到匹配项后立即将扩展程序运行的标签放到我的窗口前面,即使我当前正在第二个窗口中工作。

到目前为止,我的 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 I tested the jQuery code in

编辑2 extension download

1 个答案:

答案 0 :(得分: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都是asynchronous,因此请确保它们是同步调用的。
  • 在内容脚本中也使用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));
    });
});

如果您需要更多信息,请与我们联系。