我正在研究谷歌扩展。我正在尝试处理我的 popup.tsx 和 background.ts 之间的消息传递
在从我的 background.ts 发送消息之前,我打印数据。数据存在。但是,在我的 popup.tsx chrome.runtime.onMessage 中没有触发。我不明白哪个功能不起作用以及问题出在哪里。我检查了很多示例,但结果仍然相同。问题是什么?我正在添加我的消息传递代码..
这是我的 background.ts runtime.sendMessage 函数。该函数位于另一个名为“collectData”的函数中。当我打开新标签或更新标签时,此功能会触发并起作用。每次这个数据工作稳定。我可以看到每一页的数据。
chrome.runtime.sendMessage({
msg: 'url_data',
data: data,
})
然后,我尝试使用 runtime.onMessage 在我的 popup.tsx 中接收数据。当我重置扩展时,它有时只工作一次,然后 onMessage 函数根本不起作用:
const [requestData, setRequestData] = useState<string>()
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
console.log(' popup runtime on message req', request)
if (request.msg === 'url_data') {
checkWebsite(request.data).then((res) => {
console.log('popup data alındı')
console.log('popu res', res)
setRequestData(res)
// chrome.runtime.sendMessage({
// msg: 'res_length',
// data: res.matches.length,
// })
// console.log('popup data res length gönderildi')
// res.matches.length === 0 ? setIsSecure(true) : setIsSecure(false)
setHost(request.data.hostname)
})
sendResponse({ message: 'res length sended' })
console.log('res length response send')
}
})
每次,我都会更改请求数据状态。如果它发生变化,我想用 useEffect 更新弹出窗口。
useEffect(() => {
console.log('useeffect', requestData)
}, [requestData])
结果,首先,主要问题是消息传递。为什么它不工作?