我正在撰写Chrome扩展程序,该扩展程序会根据当前网址动态更改弹出窗口的内容。
我在background.js中做了类似的事情,效果很好:
if(domains.contains(request.url)){
chrome.browserAction.setPopup({
popup: "tracking.html"
});
}else{
chrome.browserAction.setPopup({
popup: "nottracking.html"
});
}
问题是,如果我切换选项卡,弹出窗口的内容在选项卡之间保持不变。处理这个问题的正确策略是什么?
tabId
参数,但文档有点不足)非常感谢所有人的帮助!
答案 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
});
});