>웹 프론트엔드 >JS 튜토리얼 >Chrome 확장 프로그램의 고아 스크립트로 인해 발생하는 통신 문제를 어떻게 해결합니까?

Chrome 확장 프로그램의 고아 스크립트로 인해 발생하는 통신 문제를 어떻게 해결합니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-01 00:22:29228검색

How Do I Fix Communication Issues Caused by Orphaned Scripts in Chrome Extensions?

Chrome 확장 프로그램에서 고아 스크립트 문제 해결

실수로 Chrome 확장 프로그램을 다시 로드한 후 복구하면 고아 스크립트가 발생하여 콘텐츠 간 통신 문제가 발생할 수 있습니다. 스크립트 및 확장의 다른 부분. 다음은 고아 스크립트를 제거하고 적절한 기능을 복원하는 솔루션입니다.

고아 스크립트 종료

고아 콘텐츠 스크립트는 여전히 DOM 메시지를 받을 수 있습니다. 창 개체를 통해 새 작업 콘텐츠 스크립트의 메시지를 고스트 콘텐츠 스크립트로 보냅니다. 메시지를 받으면 고아 스크립트는 다음을 수행해야 합니다.

  • 모든 이벤트 리스너를 등록 취소하고 모든 전역 변수를 무효화하여 가비지 수집 대상이 되도록 해야 합니다.
  • 콘텐츠에서. js:

    <code class="javascript">var orphanMessageId = chrome.runtime.id + 'orphanCheck';
    window.dispatchEvent(new Event(orphanMessageId));
    window.addEventListener(orphanMessageId, unregisterOrphan);
    
    // ... Register event listeners with named functions to preserve their references
    
    function unregisterOrphan() {
    // ... Unregister listeners and remove global variables
    }</code>

콘텐츠 스크립트 삽입 보장

고아 스크립트로 메시지를 보내는 것을 방지하려면 popup.js에서 다음을 확인해야 합니다. 메시지를 보내기 전에 라이브 콘텐츠 스크립트가 실행됩니다.

<code class="javascript">async function sendMessage(data) {
  const [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
  if (await ensureContentScript(tab.id)) {
    return await chrome.tabs.sendMessage(tab.id, data);
  }
}

async function ensureContentScript(tabId) {
  // ... Check if content script is running and inject it if not
}</code>

이러한 조치를 구현하면 분리된 스크립트를 효과적으로 제거하고 통신 문제를 방지하며 Chrome 확장 프로그램의 기능을 복원할 수 있습니다.

위 내용은 Chrome 확장 프로그램의 고아 스크립트로 인해 발생하는 통신 문제를 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.