Program Club

Chrome 확장 코드 대 콘텐츠 스크립트 대 삽입 된 스크립트

proclub 2021. 1. 5. 08:20
반응형

Chrome 확장 코드 대 콘텐츠 스크립트 대 삽입 된 스크립트


init()새 페이지가로드 될 때마다 Chrome 확장 프로그램이 기능을 실행하도록 하려고하는데이 작업을 수행하는 방법을 이해하는 데 문제가 있습니다. 내가 이해 한 바에 따르면 background.html에서 다음을 수행해야합니다.

  1. chrome.tabs.onUpdated.addListener()페이지 변경시기 확인에 사용
  2. chrome.tabs.executeScript스크립트를 실행하는 데 사용 합니다.

이것은 내가 가진 코드입니다.

//background.html
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    chrome.tabs.executeScript(null, {code:"init();"});
});

//script.js
function init() {
    alert("It works!");
}

또한 init () 함수가 다른 JS 파일에있는 다른 함수에 액세스 할 수 있는지 궁금합니다.


Chrome 확장 프로그램의 자바 스크립트 코드는 다음 그룹으로 나눌 수 있습니다.

  • 확장 코드-허용 된 모든 chrome.*API에 대한 전체 액세스 권한 입니다.
    여기에는 배경 페이지브라우저 팝업과 같이을 통해 직접 액세스 할 수있는 모든 페이지가 chrome.extension.getBackgroundPage()포함됩니다 .

  • 내용 스크립트 (매니페스트 파일 또는 경유 chrome.tabs.executeScript) - 부분 의 일부에 액세스 chromeAPI를 , (페이지의 DOM에 대한 전체 액세스 하지 의 어느window프레임을 포함하여 오브젝트).
    콘텐츠 스크립트는 확장과 페이지 사이의 범위에서 실행됩니다. window콘텐츠 스크립트의 전역개체는 페이지 / 확장 프로그램의 전역 네임 스페이스와 다릅니다.

  • 삽입 된 스크립트 ( 콘텐츠 스크립트 에서이 방법통해 )-페이지의 모든 속성에 대한 전체 액세스 권한입니다. API에 대한 액세스 권한이 없습니다 chrome.*.
    삽입 된 스크립트는 페이지 자체에 포함 된 것처럼 작동하며 어떤 식 으로든 확장에 연결되지 않습니다. 다양한 주입 방법에 대한 자세한 내용 이 게시물참조하십시오 .

삽입 된 스크립트에서 콘텐츠 스크립트로 메시지를 보내려면 이벤트를 사용해야합니다. 예제는 이 답변참조하십시오 . 참고 : 확장 내에서 한 컨텍스트에서 다른 컨텍스트로 전송 된 메시지는 자동으로 (JSON) 직렬화되고 파싱 됩니다.


귀하의 경우 chrome.tabs.onUpdated에는 콘텐츠 스크립트 script.js가 평가 되기 전에 백그라운드 페이지 ( ) 의 코드 가 호출 될 가능성이 높습니다 . 그래서, 당신은 얻을 것이다 ReferenceError때문에, init아니다.

또한를 사용할 때는 chrome.tabs.onUpdated이벤트가로드 전과 종료시 두 번 발생하므로 페이지가 완전히로드되었는지 테스트해야합니다.

//background.html
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if (changeInfo.status == 'complete') {
        // Execute some script when the page is fully (DOM) ready
        chrome.tabs.executeScript(null, {code:"init();"});
    }
});

참조 URL : https://stackoverflow.com/questions/9915311/chrome-extension-code-vs-content-scripts-vs-injected-scripts

반응형