>웹 프론트엔드 >JS 튜토리얼 >내 콘텐츠 스크립트가 chrome.tabs에 액세스할 수 없는 이유는 무엇이며 '정의되지 않은 참조' 오류는 어떻게 해결합니까?

내 콘텐츠 스크립트가 chrome.tabs에 액세스할 수 없는 이유는 무엇이며 '정의되지 않은 참조' 오류는 어떻게 해결합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-09 22:49:10213검색

Why Can't My Content Script Access chrome.tabs and How Do I Fix the

콘텐츠 스크립트 및 Chrome API: 정의되지 않은 참조 오류

Chrome 확장 프로그램에서 콘텐츠 스크립트로 작업할 때 '읽을 수 없음' 오류가 발생할 수 있습니다. chrome.tabs와 같은 Chrome API에 액세스하려고 하면 정의되지 않음" 속성이 발생합니다. 이 문제는 매니페스트에서 필요한 권한을 부여했음에도 불구하고 발생합니다.

Chrome API 가용성 이해

보안 고려 사항으로 인해 콘텐츠 스크립트는 Chrome API에 대한 액세스가 제한되어 있습니다. 콘텐츠 스크립트 내에서는 특정 API 그룹에만 액세스할 수 있습니다.

  • chrome.i18n
  • chrome.dom
  • chrome.storage
  • 하위 집합 chrome.runtime/chrome.extension

API 브라우저 탭을 조작하는 chrome.tabs는 백그라운드 스크립트(또는 Manifest V3의 서비스 워커), 팝업 스크립트 및 기타 확장 컨텍스트에서만 사용할 수 있습니다.

해결책: 메시지 전달

콘텐츠 스크립트에서 사용할 수 없는 Chrome API에 액세스하려면 콘텐츠 스크립트의 메시지를 백그라운드 스크립트로 전달해야 합니다. 그런 다음 백그라운드 스크립트는 API 작업을 수행하고 결과를 콘텐츠 스크립트로 다시 보낼 수 있습니다.

다음은 이 접근 방식을 보여주는 코드 조각입니다.

// content script:

chrome.runtime.sendMessage({ type: "getTabs" }, function(response) {
  console.log(response.tabs);
});

// background script:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  if (request.type == "getTabs") {
    chrome.tabs.query({}, function(tabs) {
      sendResponse({ tabs: tabs });
    });
  }
});

이 접근 방식을 따르면 효과적으로 다음을 수행할 수 있습니다. 보안과 캡슐화를 유지하면서 콘텐츠 스크립트 내에서 사용할 수 없는 Chrome API에 액세스하세요.

위 내용은 내 콘텐츠 스크립트가 chrome.tabs에 액세스할 수 없는 이유는 무엇이며 '정의되지 않은 참조' 오류는 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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