background.html:
// Called when the url of a tab changes.
function checkForValidUrl(tabId, changeInfo, tab) {
if(changeInfo.status === "loading") {
if (tab.url.indexOf('google.com') > -1) {
// ... show the page action.
chrome.pageAction.show(tabId);
chrome.pageAction.onClicked.addListener(function(tab){
chrome.tabs.create({url: "facebook.com", "active":true});
});
}
}
};
// Listen for any changes to the URL of any tab.
chrome.tabs.onUpdated.addListener(checkForValidUrl);
所以,我继续google,点击页面操作,在新标签页面打开facebook。我再次使用google 新标签,点击页面操作,然后打开2个facebook-tabs。它很奇怪,因为我需要 - 点击页面操作 - 1个新选项卡。如何解决?
感谢。
答案 0 :(得分:1)
问题是,每次选项卡更改时,您都会添加一个事件侦听器。
由于每次标签更改时都会调用checkForValidUrl
,因此每次标签更改时都会调用chrome.pageAction.onClicked.addListener
。现在你的pageAction
有两个事件监听器做同样的事情。您可以通过多次更改标签来验证这一点,并看到它将打开与更改标签一样多的Facebook标签。
要解决此问题,您当然应从checkForValidUrl
chrome.pageAction.onClicked.addListener(function(tab){
chrome.tabs.create({url: "facebook.com", "active":true});
});
并将其放在外面,例如,在为chrome.tabs.onUpdated
设置听众之后。