크롬 확장자:어떻게 실행할 수 있습니까 메시지를 전달하는 여러 번?

0

질문

나는 프로젝트에서 작업을 생산하는 크롬 확장입니다. 을 배경에서 페이지가 함수 이름 checkingProcess. 이 함수가 실행될 때 새 탭을 열거나 탭이 업데이트됩니다. (나를 잡으려고 변화의 URL 은 여기에.)

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 초입니다. 당신이 사용하고 싶 setIntervaluseEffect은 다음과 같습니다.
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ý
..................................................................................................................