क्रोम एक्सटेंशन: कैसे कर सकते हैं मैं चलाने के लिए संदेश गुजर रहा है कई बार?

0

सवाल

मैं कर रहा हूँ एक परियोजना पर काम कर पैदा करता है जो एक क्रोम एक्सटेंशन है. में एक पृष्ठभूमि पृष्ठ मैं एक समारोह का नाम checkingProcess. इस समारोह में मार डाला है जब एक नया टैब खोला है या एक टैब अद्यतन किया जाता है. (मैं करने की कोशिश की पकड़ को बदलने के लिए URL यहाँ.)

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

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

फिर, checkingProcess समारोह में, मैं कुछ कार्यों के लिए डेटा को संभालने और एपीआई कहता है । तो मैं करने की कोशिश की है कि एक संदेश प्राप्त से आता है पॉपअप । इस संदेश का प्रतिनिधित्व करता है कि पॉपअप था उपयोगकर्ता द्वारा खोला.

 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 विधि । नोट: इस का उपयोग सावधानी के साथ । यदि आप सेटअप अपने घटक है कि एक तरह से यह फिर से renders अक्सर, यह जल्दी से बदल सकते हैं जहां एक की स्थिति में कई एपीआई कॉल किया जाता है ।
  • को क्रियान्वित करने 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ý
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में