2013-05-20 4 views
1

크롬 확장 코드에 InjectDetails 개체를 사용하고 있습니다. 나는 runAt 필드에 언급 된 문서에 대해 조금 혼란 스럽다. 여기크롬 확장의 문서 의미 InjectDetails

은 여기에 언급 문서

runAt (optional enum of "document_start", "document_end", or "document_idle") 

documentation에서 니펫을한다? 가능한 옵션은 다음과 같습니다. -

  • 원본 문서 (브라우저에로드 된 상위 프레임).
  • JS/CSS가 삽입 될 문서입니다.
  • 문서가 어떻게이 문제를 확인해야합니다 background.html

으로 백그라운드에서 실행 (원본 문서 안에 여러 iframe이있을 수 있습니다)?

답변

4

allFramestrue 인 경우 "문서"는 최상위 문서만을 나타냅니다.
그렇지 않으면 일치하는 각 프레임의 문서 (예 : 최상위, iframe)를 나타냅니다.

당신은 Content scripts 문서에서 run_at에 대한 자세한 정보를 얻을 수 있습니다 옵션

run_at string 

합니다.js에있는 파일이 주입되는시기를 제어합니다. "document_start", "document_end"또는 "document_idle"이 될 수 있습니다. 기본값은 "document_idle"입니다.

"document_start"의 경우 파일은 css의 파일 다음에 삽입되지만 다른 DOM이 생성되거나 다른 스크립트가 실행되기 전에 삽입됩니다.

"document_end"의 경우 파일은 DOM이 완료된 직후에 이미지와 프레임과 같은 하위 리소스가로드되기 전에 삽입됩니다.

"document_idle"의 경우 브라우저는 "document_end"와 window.onload 이벤트가 발생한 직후에 스크립트를 삽입 할 시간을 선택합니다. 주입의 정확한 순간은 문서의 복잡성과로드하는 데 걸리는 시간에 따라 다르며 페이지로드 속도에 최적화되어 있습니다.

는 : 이미 발사 후 그들이 실행할 수 있기 때문에 "document_idle"로, 콘텐츠 스크립트는 반드시의 window.onload 이벤트를받지 못할 수 있습니다. 대부분의 경우 onload 이벤트를 수신하는 것은 "document_idle"에서 실행되는 콘텐츠 스크립트가 DOM이 완료된 후에 실행되도록 보장되기 때문에 필요하지 않습니다. 스크립트가 window.onload 이후에 반드시 실행되어야하는 경우 document.readyState 속성을 사용하여 onload가 이미 시작되었는지 확인할 수 있습니다.

ps. 속성 이름은 chrome.tabs.executeScript (runAt, allFrames)이지만, 매니페스트 파일 (run_at, all_frames)의 밑줄로 철자가 들어 있습니다.

관련 문제