
웹 브라우저에서 `window` 객체는 JavaScript의 궁극적인 객체로, 다양한 기능들을 제공합니다. `window` 객체는 브라우저의 탭이나 창을 대표하며, 웹 페이지의 전역 범위(Global Scope)를 나타냅니다. 이로 인해, 모든 전역 JavaScript 객체, 함수, 변수들은 자동적으로 `window` 객체의 구성원이 됩니다.
`window` 객체에는 웹 페이지의 컨텐츠와 관련된 수많은 속성 및 메서드가 포함되어 있습니다. 예컨대, `document` 객체에 접근할 수 있어 웹 페이지의 DOM 요소를 조작하는 것이 가능합니다. 또한, 타이머를 설정하거나 새로운 브라우저 창을 열거나, 현재 창의 위치나 크기 등을 조절하는 작업들 역시 가능합니다.
크롬 확장프로그램에서의 주의 사항
[백그라운드 스크립트]
그러나, 웹 페이지의 `window` 객체와 웹 브라우저 확장 프로그램의 `window` 객체는 각각 다른 컨텍스트(Context)에서 동작합니다. 웹 페이지의 `window` 객체는 웹 페이지의 전역 범위를 대표하며, 웹 페이지에서 정의된 전역 변수나 함수, DOM 요소에 접근이 가능합니다. 그러나 확장 프로그램의 `window` 객체는 확장 프로그램의 전역 범위를 대표하고, 확장 프로그램에서 정의된 전역 변수나 함수에 접근할 수 있지만, 웹 페이지의 요소에는 직접 접근이 불가능합니다. 이러한 이유로 확장 프로그램에서 웹 페이지와 데이터를 주고받을 때는 `postMessage`와 같은 메시지 전달 기능을 사용하게 됩니다.
아래에 두 가지 경우에 대한 예제 코드를 제공하겠습니다.
1. 웹 페이지의 `window` 객체 사용 예제:
이 예제는 웹 페이지에서 `window` 객체를 사용하여 현재 URL을 확인하는 코드입니다.
// 웹 페이지 내의 JavaScript
console.log(window.location.href); // 현재 페이지의 URL 출력
2. 웹 브라우저 확장 프로그램의 `window` 객체 사용 예제:
이 예제는 웹 브라우저 확장 프로그램에서 `window` 객체를 사용하여 새로운 탭을 열어 특정 URL로 이동하는 코드입니다.
// 크롬 확장 프로그램의 background.js 내부
chrome.browserAction.onClicked.addListener(function(tab) {
// 새로운 탭을 열고, 특정 URL로 이동
chrome.tabs.create({ url:
"http://example.com" });
});
이 두 예제는 동일한 `window` 객체를 사용하고 있지만, 각각 다른 컨텍스트에서 작동하며, 다른 결과를 반환합니다. 웹 페이지에서의 `window`는 웹 페이지의 전역 범위를 나타내고, 웹 브라우저 확장 프로그램에서의 `window`는 확장 프로그램의 전역 범위를 나타냅니다.
[콘텐트 스크립트]
그렇습니다. Content scripts는 웹 페이지의 DOM에 접근할 수 있어, 웹 페이지의 내용을 읽거나 수정하는 것이 가능합니다. 그러나 Content scripts는 웹 페이지의 JavaScript와는 별개의 환경에서 실행됩니다. 이는 보안상의 이유와, 웹 페이지 자체의 스크립트와 충돌을 방지하기 위함입니다.
따라서, Content scripts는 페이지 컨텍스트에서 실행되는 일반 JavaScript와는 다르게 동작합니다. 이 두 환경은 공유하는 JavaScript 변수나 함수 등이 없습니다. 그렇기에 웹 페이지의 JavaScript가 정의한 변수에 접근하려면 몇 가지 추가적인 단계를 거쳐야 합니다. 이에 대한 일반적인 접근법은 웹 페이지에 스크립트 요소를 삽입하는 것입니다.
Content scripts는 다음과 같은 권한을 가지고 있습니다:
- 웹 페이지의 DOM에 접근하여 읽기 및 쓰기
- 웹 브라우저 API의 일부에 접근
(예: `chrome.extension`, `chrome.runtime`, `chrome.i18n` 등)
- 웹 페이지에서 전송된 요청에 대해 리스닝하고, 필요하다면 그 요청을 차단하거나 수정
그러나 Content scripts는 다음과 같은 제한 사항이 있습니다:
- 페이지 컨텍스트에서 실행되는 JavaScript 변수와 함수에 직접적으로 접근할 수 없음
- 일부 웹 브라우저 API에 접근할 수 없음 (예: `chrome.tabs`, `chrome.browserAction` 등)
그래서 Content scripts는 웹 페이지와 확장 프로그램 사이에서 중개자 역할을 수행합니다. 이를 통해 웹 페이지의 데이터를 읽고, 확장 프로그램의 기능을 수행할 수 있습니다.
'크롬확장프로그램' 카테고리의 다른 글
| 크롬 익스텐션의 작동 구조와 통신 과정 (0) | 2023.06.24 |
|---|