Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在页面中重新加载或导航时,是否有更好的事件将消息从background.js发送到content.js?_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript 在页面中重新加载或导航时,是否有更好的事件将消息从background.js发送到content.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扩展,它将根据过滤的单词从页面中隐藏某些元素

我从弹出窗口抓取输入,将其存储在chrome.storage.sync中,在background.js中,我有一个侦听器,当有更改时会收到通知,并向content.js发送消息以修改页面

这只有在我提交输入时才起作用。例如,当我刷新页面或移动到网站的另一个页面时,它不起作用

因此,我在background.js中添加了
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。