Javascript 在页面中重新加载或导航时,是否有更好的事件将消息从background.js发送到content.js?
我正在做一个chrome扩展,它将根据过滤的单词从页面中隐藏某些元素 我从弹出窗口抓取输入,将其存储在chrome.storage.sync中,在background.js中,我有一个侦听器,当有更改时会收到通知,并向content.js发送消息以修改页面 这只有在我提交输入时才起作用。例如,当我刷新页面或移动到网站的另一个页面时,它不起作用 因此,我在background.js中添加了Javascript 在页面中重新加载或导航时,是否有更好的事件将消息从background.js发送到content.js?,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在做一个chrome扩展,它将根据过滤的单词从页面中隐藏某些元素 我从弹出窗口抓取输入,将其存储在chrome.storage.sync中,在background.js中,我有一个侦听器,当有更改时会收到通知,并向content.js发送消息以修改页面 这只有在我提交输入时才起作用。例如,当我刷新页面或移动到网站的另一个页面时,它不起作用 因此,我在background.js中添加了chrome.tabs.onUpdated.addListener()。我注意到,每当我单击该页面上的链接时,
chrome.tabs.onUpdated.addListener()
。我注意到,每当我单击该页面上的链接时,侦听器都会被调用4-5次,并在content.js中调用我的函数。
我看到我可以使用一个条件changeInfo.status==“complete”
,但我注意到当我点击页面上的外部链接并加载它们时,我的函数再次被调用
background.js
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
chrome.storage.sync.get(["nickname", "stringInNickname", "username", "keyWords"], (data) => {
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
// console.log("data sent to content", data);
chrome.tabs.sendMessage(tabs[0].id, data);
});
});
});
content.js
function setEventListeners() {
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
// console.log("recieved", request);
data.unwantedNicknames = request.nickname.split(",").filter((val) => val != "");
data.unwantedStringInNickname = request.stringInNickname.split(",").filter((val) => val != "");
data.unwantedUsernames = request.username.split(",").filter((val) => val != "");
data.unwantedKeyWords = request.keyWords.split(",").filter((val) => val != "");
updateTweets();
});
}
基本上,我只希望我在content.js中的函数只在我重新加载并移动到同一网站上的另一个页面时调用。有更好的方法吗?OnUpdate是针对多个更改调用的,因此您需要检查
changeInfo.url
,查找周围的示例。另外,您不需要query(),因为onUpdate已经为您提供了tabId。