Jak*_*dor 6 javascript jquery dom google-chrome google-chrome-extension
我正在尝试做像adblock这样的事情.Adblock计算"广告"的数量并更新徽章价值.目前,我尝试使用"背景页面"执行某些操作,但它们只运行一次,并且所有选项卡的徽章值都相同.我无法使用浏览器操作popup.html,因为它只在点击后触发.
所以我需要一些带有当前标签的东西,能够读取当前选项卡的DOM以及所有更新徽章值.但是,在我点击不同的标签后,我需要计算新的徽章价值.
提前致谢
wOx*_*xOm 12
如果您指定了tabId参数,则会为每个选项卡单独存储徽章文本,如果您已设置了值,则无需在用户切换选项卡后手动更新徽章文本.
因此,如果您的扩展程序在加载后立即处理页面,请调用chrome.browserAction.setBadgeText一次.您可以通过将内容脚本中的消息发送到后台/事件页面来执行此操作setBadgeText,该页面将使用发件人选项卡的ID进行调用(此参数使文本对选项卡唯一).
可能有一个问题:预呈现(不可见)选项卡无法分配徽章文本,因此您必须推迟更新,这是使用制表符和webNavigation API 的示例:
内容脚本:
chrome.runtime.sendMessage({badgeText: "123"});
Run Code Online (Sandbox Code Playgroud)
背景/事件脚本:
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
if (message.badgeText) {
chrome.tabs.get(sender.tab.id, function(tab) {
if (chrome.runtime.lastError) {
return; // the prerendered tab has been nuked, happens in omnibox search
}
if (tab.index >= 0) { // tab is visible
chrome.browserAction.setBadgeText({tabId:tab.id, text:message.badgeText});
} else { // prerendered tab, invisible yet, happens quite rarely
var tabId = sender.tab.id, text = message.badgeText;
chrome.webNavigation.onCommitted.addListener(function update(details) {
if (details.tabId == tabId) {
chrome.browserAction.setBadgeText({tabId: tabId, text: text});
chrome.webNavigation.onCommitted.removeListener(update);
}
});
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1212 次 |
| 最近记录: |