>웹 프론트엔드 >JS 튜토리얼 >콘텐츠 스크립트에서 Chrome API에 액세스할 때 '정의되지 않은 속성을 읽을 수 없습니다'라는 메시지가 나타나는 이유는 무엇입니까?

콘텐츠 스크립트에서 Chrome API에 액세스할 때 '정의되지 않은 속성을 읽을 수 없습니다'라는 메시지가 나타나는 이유는 무엇입니까?

DDD
DDD원래의
2024-12-03 02:56:09333검색

Why Do I Get

콘텐츠 스크립트에서 Chrome API에 액세스: "정의되지 않은 속성을 읽을 수 없음" 오류 해결

chrome.tabs와 같은 Chrome API에 액세스할 때 콘텐츠 스크립트를 사용하는 경우 개발자는 "정의되지 않은 속성을 읽을 수 없습니다" 오류가 발생할 수 있습니다. 이 오류는 콘텐츠 스크립트가 Chrome API에 대한 액세스가 제한되어 있기 때문에 발생합니다.

질문에 제공된 대로 매니페스트 파일의 권한 섹션에는 탭 권한이 포함되어 있습니다. 하지만 이 권한은 백그라운드 스크립트, 팝업 스크립트 또는 서비스 워커의 탭 API에 대한 액세스만 허용합니다.

오류 원인

콘텐츠 스크립트가 웹에 삽입됩니다. 페이지가 제한되어 있으며 사용할 수 있는 API 세트가 제한되어 있습니다. 이러한 API에는 chrome.i18n, chrome.dom, chrome.storage, chrome.runtime 및 chrome.extension의 하위 집합이 포함됩니다. 브라우저 탭과 창을 조작하는 chrome.tabs와 같은 API는 콘텐츠 스크립트에서 사용할 수 없습니다.

해결 방법

이 오류를 해결하려면 다음을 전달하는 것이 좋습니다. 콘텐츠 스크립트에서 백그라운드 스크립트로의 메시지입니다. 그런 다음 백그라운드 스크립트는 chrome.tabs API를 사용하고 콘텐츠 스크립트의 메시지에 응답할 수 있습니다.

다음은 구현 예입니다.

콘텐츠 스크립트:

chrome.runtime.sendMessage({ action: "getTabsInfo" }, (response) => {
    // Process the response from the background script
});

배경 스크립트:

chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
    if (request.action === "getTabsInfo") {
        chrome.tabs.query({}, (tabs) => {
            sendResponse({ tabs });
        });
        return true;
    }
});

이 접근 방식을 사용하면 콘텐츠 스크립트가 백그라운드 스크립트에 메시지를 보내 Chrome API에 액세스할 수 있습니다.

위 내용은 콘텐츠 스크립트에서 Chrome API에 액세스할 때 '정의되지 않은 속성을 읽을 수 없습니다'라는 메시지가 나타나는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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