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

dhxwm5r4  于 2023-02-06  发布在  Go
关注(0)|答案(3)|浏览(205)

我正在写一个Chrome扩展,它可以根据当前的URL动态地更改弹出窗口的内容。
我在background.js中做了类似这样的事情,它运行良好:

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

问题是如果我切换标签页,弹出的内容在标签页之间保持不变。什么是正确的策略来处理这个问题?

  • 以某种方式挂钩到选项卡更改事件(如果存在这种可能性)?
  • 将弹出内容的更改限制在当前标签页?(我注意到chrome.browserAction.setPopup有一个可选的tabId参数,但是文档有点少)
  • 还有别的吗?

非常感谢所有的帮助!

cfh9epnr

cfh9epnr1#

选项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'
        });
    }
});
2ledvvac

2ledvvac2#

只需将TabId传递给setPopup调用即可。http://code.google.com/chrome/extensions/browserAction.html
我经常在我的背景页面中这样做:

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

就像个护身符。

chy5wohz

chy5wohz3#

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
    });
});

相关问题