• Content Scripts가 Inject되는 타이밍을 정의 할 수 있다.
    manifest.json의 content_scripts의 속성 중 run_at 속성으로 content_scripts 파일이 Inject되는 시점을 정의 할 수 있다. run_at의 값으로는 document_start, document_end, document_idle 세가지가 올 수 있다. 기본으로 document_idle이 적용되며 Inject되는 시점은 아래와 같다.

      • document_start: DOM이 생성되기전 또는 다른 Script들이 실행되기전에 Script가 Inject 된다. Inject하려는 Script가 1빠로 실행되어야 하면 이 타이밍을 노려보자.
      • document_end: DOM 생성이 완료 된 후, Script가 Inject된다.
      • document_idle: document_idle은 시점이 불명확한데, document_end 이벤트와 window.onload 이벤트가 Fire된 직후 그 사이에 Script가 Inject 된다. 따라서 document_idle로 Inject되는 경우 window.onload 이벤트를 받지 못 할 수 있다.

    * 예전에 Supreme 자동구매 봇을 만든적이 있는데, (참고로 Supreme의 인기 신상은 1~2초 싸움이다) run_at:document_idle에서 제품을 담고, 결제하도록 했을 때와 run_at:document_end:에서 제품을 담고, 결제하도록 했을 때의 성공 확률이 크게 차이났었다.

 

  • Content Scripts는 Web Pages의 DOM에 접근 및 제어가 가능하나, JavaScript Context는 별도로 존재한다.
    Web Pages와 Content Scripts는 각각 별도의 JavaScript Scope를 갖기 때문에, Content Script에서 Web Pages의 변수나 함수를 사용 할 수 없고, Web Pages에서도 Contents Scripts의 변수나 함수에 접근 할 수 없다.  허나  Content Scripts에서 Web Pages의 DOM에 접근 및 제어가 가능하다.  DOM을 제어 할 수 있다는 사실은 실로 대단한 가능성을 내포하고 있다.

 

  • Content Scripts는 Chrome Extension의 Popup과 Background Scripts와 localStorage를 공유하지 않는다.
    localStorage도메인 별로 독립된 저장공간을 사용한다. Content Scripts는 Web Pages와 같은 도메인에서 실행되고, Popup과 Background Scripts는 chrome-extension://으로 시작하는 도메인에서 실행된다.  따라서 Content Scripts와 Popup, Background Scripts는 localStorage를 통해 데이터를 공유 할 수 없다.
    * 글로 적으면 당연한 사실인데 만들다보면 왠지 공유가 될 것 같다. 희망은 이성을 초월하는 것 같다.만약 반드시 Content Scripts와 Popup, Background Scripts간 데이터를 저장/공유해야 한다면 localStorage 대신 chrome.storage를 사용해야 한다. * 알 수 없는 이유로 10분을 허비하기 싫으면, manifest.json의 permissions에 storage 추가하는 것을 잊지 말자.
    사용법은 https://developer.chrome.com/extensions/storage#property-sync 링크를 참고하면 쉽다;localStorage와 다르게 개발자 도구에서 Inspect/Edit를 제공하지 않는다. (2017/05 기준) 만약 chrome.storage를 Heavy하게 사용 할 예정이라면, Storage Area Explorer를 설치해서 사용해야 한다. 아직 정품이 없다.

 

  • Again, Content Script는 Web Pages의 DOM에는 접근/제어가 가능하나, JavaScript Scope는 별도로 존재한다.
    만약, Web Pages에서 필요한 JavaScript 코드가 있다면 Script Element를 이용해 File 또는 Text를 Inject 하는게 제일 편하다.아래의 코드를 통해 File 또는 Text를 Inject 할 수 있고, Inject 하려는 파일은 manifest.json의 web_accessible_resources에 선언되어야 한다. web_accessible_resources에 선언된 파일에 한해 Web Pages에서 접근 가능하다.