【发布时间】:2021-06-25 16:40:22
【问题描述】:
我目前正在尝试制作 Chrome 扩展程序,但遇到了一个问题,我不知道如何从非活动选项卡更新 HTML。我正在尝试在非活动标签中定期访问 Google Meet 的 HTML,以检测人们何时离开或加入通话。但是,document.querySelector 仅在选项卡获得焦点时才起作用,就好像它没有获得焦点一样,它只会继续提供与上次获得焦点时相同的信息,即使从那时起人们已经离开或加入了通话。有什么方法可以检测这些更改而无需关注选项卡?这是我在代码中尝试过的:
background.js
meetTab = []
// check for google meet tabs
function query()
{
meetTab = []
chrome.tabs.query({url: "https://meet.google.com/*-*"},function(tabs)
{
tabs.forEach(function(tab)
{
meetTab.push(tab)
});
})
}
chrome.tabs.onCreated.addListener(query)
chrome.tabs.onRemoved.addListener(query)
chrome.runtime.onStartup.addListener(query)
setInterval(send, 3000)
// execute script for each google meet tab every 3 sec
function send()
{
meetTab.forEach(function(tab)
{
chrome.tabs.executeScript(tab.id, {file: "check.js"})
})
}
// this part only prints updated info when meet tab is active
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
console.log(message)
});
check.js
// element to be tracked
thing = document.querySelector("#ow3 > div.T4LgNb > div > div:nth-child(9) > div.crqnQb > div.rG0ybd.xPh1xb.P9KVBf.LCXT6 > div.TqwH9c > div.SZfyod > div > div > div:nth-child(2) > div > div")
chrome.runtime.sendMessage({msg:thing.innerText})
manifest.json
{
"manifest_version": 2,
"name": "Meet Kicker",
"version": "1.0",
"icons": {"128": "bigicon.png"},
"browser_action": {
"default_icon": "smallicon.png",
"default_popup": "popup.html"
},
"permissions": ["storage", "tabs", "<all_urls>"],
"background":
{
"scripts": [
"background.js"
]
}
}
更新 check.js 尝试使用 MutationObserver
thing = document.querySelector("#ow3 > div.T4LgNb > div > div:nth-child(9) > div.crqnQb > div.rG0ybd.xPh1xb.P9KVBf.LCXT6 > div.TqwH9c > div.SZfyod > div > div > div:nth-child(2) > div > div")
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
chrome.runtime.sendMessage({msg:thing.innerText})
});
});
observer.observe(thing, { characterData: true, attributes: false, childList: false, subtree: true });
【问题讨论】:
标签: javascript html google-chrome google-chrome-extension