CHROME -ROZŠÍRENIA: Ako môžem spustiť správu absolvovanie viackrát?

0

Otázka

Pracujem na projekte, ktorý produkuje rozšírenie prehliadača Chrome. V pozadí stránky mám funkcie s názvom checkingProcess. Táto funkcia je vykonávaná pri novej karty otvoriť alebo záložka sa aktualizuje. (Snažil som sa chytiť zmena URL tu.)

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

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

Potom, v checkingProcess funkcia, mám niekoľko funkcií pre spracovávanie údajov a volanie API. Potom som sa snažil dostať správu, že pochádza z popup. Táto správa predstavuje, že dav bol otvorený užívateľom.

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

Po tom, odošle odpoveď na okno. V pop-up, som si chcete správu vypočuť a použiť ako odpoveď na okno.

 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ı')
    })
  }, [])

Avšak, uvedomujem si, že táto správa procesu je iba vykonané raz, ale musím bežať niekoľkokrát na prístup k údajom v pozadí súčasne. Ako môžem to urobiť?

1

Najlepšiu odpoveď

1

Vaše správy sa odosielajú len raz, pretože je to v súčasnosti nastavenie v React.useEffect s prázdnym zoznamom závislostí. To znamená, tento kód bude iba spustiť raz, keď komponentu, je namontované. Ak chcete spustiť "viackrát" musíte najprv definovať, čo to znamená? Príklady:

  • Vykonávajúci sendMessage keď používateľ vykoná určitú akciu, napríklad kliknutím na tlačidlo. V takom prípade nepotrebujete useEffect. Namiesto toho, drôt event handler, ktoré tlačidlo a vykonať sendMessage tam.
  • Vykonávajúci sendMessage po re-render váš komponent. Jednoducho vyberte prázdny zoznam závislostí ([]zo svojho useEffect metódy. Poznámka: používať s opatrnosťou. Ak si nastavenia svojho komponentu tak, že sa znovu robí často, to môže rýchlo premeniť v situácii, keď mnoho API volania sú.
  • Vykonávajúci sendMessage po nejakom štáte, v rámci komponentu zmeny. Pridať tejto premennej zoznam závislostí: [loaded]
  • Vykonávajúci sendMessage každých 10 sekúnd. Budete chcieť používať setInterval v rámci svojej useEffect,, ako je tento:
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

Chcem, aby sa pri používať otvorené okno, funguje to znova.
Ceren Keklik

V iných jazykoch

Táto stránka je v iných jazykoch

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