2012-01-22 3 views
5

문서의 콘텐츠 유형이 특정 패턴과 일치하는 경우에만 콘텐츠 스크립트를 삽입 할 수 있습니까? 사실 내 목표는 훨씬 간단합니다. HTML 문서에 내 콘텐츠 스크립트를 삽입해야합니다. (지금은 XML 문서에도 삽입되어 있습니다). 내용 스크립트는 "document_start"에 삽입되어야합니다.Chrome 확장 콘텐츠 스크립트를 특정 콘텐츠 유형으로 제한하는 방법은 무엇입니까?

답변

1

비슷한 문제가 발생하여 다음과 같이 해결했습니다.

콘텐츠 스크립트가 삽입 된 다양한 문서를 문서의 Content-Type을 기반으로 제한하는 대신 모든 스크립트에 스크립트를 삽입하기로 결정했지만 적절한 스크립트로만 스크립트를 실행하기로 결정했습니다.

  • document.doctype는 HTML 문서에서 null하지이어야합니다 :

    document.xmlVersiondocument.doctype 특성을 분석하여 수행됩니다 XML 문서에서 null이 아니어야합니다.

그래서 하나의 유형을 다른 유형과 구별하고 필요한 경우에만 필요한 모든 스크립트를 "바인딩"하는 것이 쉽습니다. 특히 작은 스크립트 로더를 삽입 할 수 있습니다. 그러면 조건에 따라 무거운 물건이 추가로로드됩니다.

Chrome은 문서 유형별로 스크립트 삽입을 제한하는 수단을 제공하지 않습니다.

0

이 작업을 수행하는 가장 강력한 방법은 chrome.webRequest.onHeadersReceived을 통해 이루어지며 응답 헤더 정보 (Content-Type 포함)를 쿼리하고 보관할 수 있습니다. 유감스럽게도이 API는 현재 안정적인 Chrome 버전에서 사용할 수 없습니다. (Chrome의 현재 버전에서는 실험용 API를 사용할 수 있지만이를 사용하는 확장 프로그램을 게시 할 수는 없습니다.)

삽입 된 문서가 Chrome에 의해 처리되는지 여부를 확인하는 것이 하나의 해결책입니다 XML로. (그렇다면 문서 처리를 중단하십시오.)이를 수행하기위한 해킹은 document.getElementById('webkit-xml-viewer-source-xml')null인지 확인하는 것입니다. 이 요소는 Chrome/웹킷의 XML 뷰어의 일부입니다.

+0

콘텐츠 스크립트가 동작을 수행하기 전에 문서가로드 될 때까지 기다리는 이벤트 수신기를 추가하면 어떻게 될까요? 예를 들어,'document.addEventListener ("DOMContentLoaded", function() {do.stuff()};'. – cheeken

+0

이것은 필자가 피하는 것이므로 스크립트가 먼저 실행되어야한다. (문서가로드되기 전에) – spektom

+0

그럴 경우 다른 권장 사항이 없습니다. 행운을 빈다. – cheeken

관련 문제