CHROME -EXTENSII: Cum pot rula mesajul trece de mai multe ori?

0

Problema

Am de lucru pe un proiect care produce o extensie Chrome. Într-o pagină de fundal I au o funcție numită checkingProcess. Această funcție este executată atunci când se deschide un tab nou sau un tab este actualizat. (Am încercat să prind schimbare de adresă URL aici.)

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

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

Apoi, în checkingProcess funcție, am unele funcții pentru manipularea datelor și apeluri API. Apoi am încercat să primiți un mesaj care vine de la pop-up. Acest mesaj indică faptul că pop-up a fost deschis de către utilizator.

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

După aceea, se trimite un răspuns la pop-up. În fereastra pop-up, am asculta mesajul și de a folosi răspuns în pop-up.

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

Cu toate acestea, mi-am dat seama că acest mesaj proces este executat doar o dată, dar am nevoie să-l rulați de mai multe ori pentru a accesa datele în fundal simultan. Cum pot face asta?

1

Cel mai bun răspuns

1

Mesajul este trimis doar o dată, pentru că este în prezent de configurare într-un React.useEffect cu o listă goală de dependențe. Acest lucru înseamnă că acest cod va fi rulat doar o dată atunci când componenta este montat. Dacă doriți să rulați "de mai multe ori," mai întâi trebuie să definim ce înseamnă asta? Exemple sunt:

  • Executare sendMessage după ce un utilizator efectuează o acțiune, cum ar fi clic pe un buton. În acest caz, nu aveți nevoie useEffect. În schimb, sârmă de un handler de eveniment la care butonul și de a efectua sendMessage acolo.
  • Executare sendMessage după re-face de componentă. Pur și simplu scoateți listă goală de dependențe ([]) de la dvs. useEffect metoda. Notă: utilizați cu prudență. Dacă setup componentă într-un mod care re-face de multe ori, acest lucru se poate transforma rapid într-o situație în care mai multe apeluri API sunt realizate.
  • Executare sendMessage după unele de stat în cadrul componentei de schimbări. Adăugați această variabilă la lista de dependențe: [loaded]
  • Executare sendMessage la fiecare 10 secunde. Veți dori să utilizați setInterval în useEffect, astfel:
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

Vreau ca atunci când utilizarea deschide pop-up, acesta funcționează din nou.
Ceren Keklik

În alte limbi

Această pagină este în alte limbi

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