每个选项卡使用chrome.browserAction.setPopup

时间:2012-04-09 09:32:00

标签: google-chrome google-chrome-extension

我正在撰写Chrome扩展程序,该扩展程序会根据当前网址动态更改弹出窗口的内容。

我在background.js中做了类似的事情,效果很好:

if(domains.contains(request.url)){
    chrome.browserAction.setPopup({
        popup: "tracking.html"
    });
}else{
    chrome.browserAction.setPopup({
        popup: "nottracking.html"
    });
}

问题是,如果我切换选项卡,弹出窗口的内容在选项卡之间保持不变。处理这个问题的正确策略是什么?

  • 以某种方式进入标签更改事件(如果存在这种可能性)?
  • 将弹出内容的更改限制为当前标签? (我注意到chrome.browserAction.setPopup有一个可选的tabId参数,但文档有点不足)
  • 别的什么?

非常感谢所有人的帮助!

3 个答案:

答案 0 :(得分:6)

选项1,绑定事件监听器:

使用chrome.tabs.onUpdated来监听URI更改,然后使用给定tabId的{​​{3}}来设置给定标签的弹出窗口。例如:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if (domains.contains(tab.url)) {
        chrome.browserAction.setPopup({
            tabId: tabId,
            popup: 'tracking.html'
        });
    } else {
        chrome.browserAction.setPopup({
            tabId: tabId,
            popup: 'nottracking.html'
        });
    }
});

答案 1 :(得分:1)

只需将TabId传递给setPopup调用即可。 http://code.google.com/chrome/extensions/browserAction.html

我一直在我的背景页面中这样做:

chrome.browserAction.setPopup({"tabId":data.tabId,"popup":url});

像魅力一样。

答案 2 :(得分:0)

The setpopup parameter's object now supports a tabId value. 您需要先获取当前选项卡的数字ID。这不需要额外的权限。

chrome.tabs.query({currentWindow: true, active: true}, function(tabs){
    var url = domains.contains(request.url) ? "tracking.html" : "nottracking.html";
    chrome.browserAction.setPopup({
       popup: url,
       tabId: tabs[0].id
    });
});