10

我正在编写一个 Chrome 扩展程序,它会根据当前 URL 动态更改弹出窗口的内容。

我在 background.js 中做这样的事情,效果很好:

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

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

  • 以某种方式挂钩选项卡更改事件(如果存在这种可能性)?
  • 将弹出内容的更改限制为当前选项卡?(我确实注意到tabIdchrome.browserAction.setPopup 有一个可选参数,但文档有点少)
  • 还有什么?

非常感谢所有帮助!

4

3 回答 3

11

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

用于chrome.tabs.onUpdated侦听 URI 更改,然后chrome.browserAction.setPopup使用给定tabId设置给定选项卡的弹出窗口。例如:

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'
        });
    }
});
于 2012-04-09T09:35:51.380 回答
3

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

我一直在我的后台页面中这样做:

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

奇迹般有效。

于 2012-07-19T05:46:05.000 回答
0

参数的setpopup对象现在支持一个tabId值。 您需要先获取当前选项卡的数字 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
    });
});
于 2013-07-12T22:46:23.017 回答