铬扩展:如何运行的消息传递多次?

0

的问题

我工作上的一个项目,该项目产生的铬扩展。 在一个背景网页我有个功能,名为 checkingProcess. 这个函数时执行新的选项是打开还是一个选项进行更新。 (我试图抓住变化的网址在这里.)

chrome.tabs.onActivated.addListener((activeInfo) => {
  checkingProcess(activeInfo.tabId)
})

chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
  checkingProcess(tab.id)
})

然后在 checkingProcess 功能,我有一些功能,用于数据处理和API话。 然后我试图收到的消息,来自弹出式窗口。 这一消息表示的弹出窗口被打开过。

 chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
    if (request.msg === 'popup_opened') {
      sendResponse({
        matches_length: response['matches'].length,
        hostname: host,
      })
    }
    chrome.runtime.lastError
  })

在这之后,它会发送一个响应的弹出窗口。 在出,我听到的消息和使用的反应的弹出窗口。

 useEffect(() => {
    chrome.runtime.sendMessage({ msg: 'popup_opened' }, (res) => {
      setHostname(res['hostname'])
      setMatchesLength(res['matches_length'])
      console.log(res['hostname'], 'burası')
      console.log(res['matches_length'], 'burası')
    })
  }, [])

然而,我意识到这个消息的过程只是执行一次,但我需要运行多次访问中的数据的背景同时进行。 我怎么可以那样做?

1

最好的答案

1

你的消息,只发送一次,因为它是目前设置在一个 React.useEffect一个空的依赖列表. 这意味着这个代码将只是运行一次的时候你的部件被安装。 如果你想运行,它"多次"你首先需要定义这意味着什么吗? 实例有:

  • 执行 sendMessage 后一个用户执行一些行动,如点击一下按钮。 在这种情况下你不需要 useEffect. 相反,电线的一个事件处理程序,按钮和执行 sendMessage 那里。
  • 执行 sendMessage 后重新呈现的组成部分。 简单地删除该空的依赖性列表([])从你的 useEffect 法。 注:使用这种谨慎。 如果你设置你的分量的一种方式,它重新呈现的时候,这个可以迅速变成一种情况,许多API调。
  • 执行 sendMessage 后一些国家内组成的变化。 添加这一变量清单的相关性: [loaded]
  • 执行 sendMessage 每次10秒钟。 你会想要使用 setInterval 在你 useEffect像这样的:
useEffect(() => {
  const interval = setInterval(() => {
    chrome.runtime.sendMessage({ msg: 'popup_opened' }, (res) => {
      setHostname(res['hostname'])
      setMatchesLength(res['matches_length'])
      console.log(res['hostname'], 'burası')
      console.log(res['matches_length'], 'burası')
    })
  }, 10000);
  return () => clearInterval(interval);
}, []);
2021-11-22 13:42:25

我想,当使用开放式弹出,它的工作。
Ceren Keklik

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................