CHROME-ส่วนเสริม:ได้ยังไงผมวิ่งข้อความผ่านไปหลายครั้งแล้ว?

0

คำถาม

ฉันทำงานให้โครงการซึ่งได้เป็น Chrome เลื่อนเวลาออกไปหน่อย อยู่ในพื้นหลังของหน้าผมมีฟังก์ชันที่ชื่อ 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 กับ ว่ารายชื่อของ dependencies. นี่มันหมายความว่าดรหัสนี้จะหนีไปครั้งนึงตอนที่คุณส่วนประกอบถูกเมานท์อยู่ ถ้าคุณต้องการประมวลผลมันว่า"หลายครั้งแล้ว"แรกคุณต้องการที่จะกำหนดว่านี่มันหมายความว่ายังไง? ตัวอย่างคือ:

  • ระหว่างประมวลผล sendMessage หลังจากเป็นของผู้ใช้ performs องการการกระทำบางอย่าเหมือนการคลิกปุ่ม. ในกรณีนี้คุณไม่ต้องการ useEffect. แทนที่จะดักฟังเป็นเหตุการณ์เครื่องมือจัดการเพื่อนปุ่มและแสดง sendMessage นั่น
  • ระหว่างประมวลผล sendMessage หลังจากใหม่จัดการพาคุณส่วนประกอบ. แค่ลบล้างรายการของ dependencies([])จากของคุณ useEffect วิธีการ. ข้อควรจำ:ใช้นี่ด้วยความระมัดระวัง. ถ้าคุณตั้งค่าของคุณส่วนประกอบในแบบที่มันกลั renders บ่อยเรื่องนี้จะเร็วกลายเป็นสถานการณ์ที่หลายรูปแบบ api เรียกคืน
  • ระหว่างประมวลผล sendMessage หลังจากบางเมืองภายในของคุณส่วนประกอบการเปลี่ยนแปลง เพิ่มตัวแปรนี้ไปยังรายการของ dependencies: [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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่