Chrome 확장 코드 대 콘텐츠 스크립트 대 삽입 된 스크립트
init()새 페이지가로드 될 때마다 Chrome 확장 프로그램이 기능을 실행하도록 하려고하는데이 작업을 수행하는 방법을 이해하는 데 문제가 있습니다. 내가 이해 한 바에 따르면 background.html에서 다음을 수행해야합니다.
chrome.tabs.onUpdated.addListener()페이지 변경시기 확인에 사용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();"});
}
});
'Program Club' 카테고리의 다른 글
| 라우터 탐색은 동일한 페이지에서 ngOnInit를 호출하지 않습니다. (0) | 2021.01.05 |
|---|---|
| 장고 템플릿을 사용하여 트리 구조 (재귀)를 렌더링하려면 어떻게해야합니까? (0) | 2021.01.05 |
| Unix에서 경로의 일부 제거 (0) | 2021.01.05 |
| 난독 화 된 코드에서 문자열 숨기기 (0) | 2020.12.31 |
| Java 바이트 기본 유형에 대한 실제 용도가 있습니까? (0) | 2020.12.31 |