2011-02-28 9 views
3

웹 페이지에서 javascript 개체로 공개되는 XPCOM 구성 요소를 작성하고 싶습니다. Google Gears와 같은 것이 제가 찾고있는 것입니다. 즉, Google Gears Firefox 확장 프로그램을 설치 한 후 자바 스크립트 개체 'google.gears'를 사용하려는 모든 웹 페이지에서 사용할 수 있습니다. XPCOM 개발에 관한 많은 mozilla 문서를 찾았지만 웹 페이지에서 실행중인 javascript에 구성 요소를 표시하는 데는 아무 것도 발견하지 못했습니다. 이것이 XPCOM에서 가능합니까? 확장 기능 대신 파이어 폭스 플러그인을 작성해야합니까?웹 페이지의 javascript에 XPCOM 구성 요소를 노출하십시오.

답변

7

저는 Firefox 4의 새로운 API 인 nsiDOMGlobalPropertyInitializer를 사용하여 모든 창에 느리게 연결할 JS 개체를 만들 수 있습니다. 이것이 Firefox 4의 새로운 웹 콘솔이 생성되는 방식입니다. CI에

https://github.com/daviddahl/domcrypt/blob/master/extension/domcrypt/components/domcrypt.js SO 기본적으로, QI : 여기

QueryInterface: XPCOMUtils.generateQI([Ci.nsIDOMGlobalPropertyInitializer]), 

는 확장의 전체 구현의 예입니다

당신은 구성 요소에서 다음 QI 속성을 가지고 있어야 .nsIDGlobalPropertyInitializer를 선택한 다음 매니페스트에 다음과 같은 행이 있는지 확인하십시오.

category JavaScript-global-property crypt @droplettr.com/domcrypt;1 

참조 : https://github.com/daviddahl/domcrypt/blob/master/extension/domcrypt/components/domcrypt.manifest

+0

가 없습니다 – sdwilsh

+0

유감스럽게 생각하지만 JS 글로벌 속성에 대한 새로운 점은 없습니다. nsIDOMGlobalPropertyInitializer 인터페이스는 새로 추가되었지만 질문자의 질문에 필요하지 않습니다. 꽤 멋지다. JS 전역 속성이 그것을 구현하면, 그것이 연결된 윈도우 객체를 찾을 수 있기 때문이다. 이것은 Firefox 4 이전에는 불가능했습니다. –

1

This article 유망 보인다

는 일반적으로 (예 : 웹 페이지 등) 신뢰할 수없는 콘텐츠 그들을 만드는 을 포함, 대부분의 XPCOM 컴포넌트 아무것도 할 수 없습니다. 물론이 정책에 대한 예외가 있습니다. DOM 개체는 예를 들어 공용으로 사용하기 위해 명확하게 정의 된 인터페이스가있는 XPCOM 구성 요소입니다. 페이지에서 구성 요소를 사용하려면 어떤 방법이나 속성을 호출하는 것을 포함하여 구성 요소는 이 허용 가능하고 무엇이 아닌지 명시 적으로 Mozilla에게 말합니다. nsISecurityCheckedComponent 인터페이스 은 어떻게 수행되는지 정의합니다.

소스 : http://weblogs.mozillazine.org/weirdal/archives/017211.html

0

그것은 해 드리겠습니다하지만 당신은 프록시로 XPCOM 구성 요소에 대한 호출이있을 것이다. 또한 매우 위험 할 수 있음을 명심하십시오.

크롬 개체를 콘텐츠 코드에 노출시키는 방법은 내 대답 here을 참조하십시오.

1

이전 3.x 방법은 구성 요소를 "JavaScript 전역 속성"범주에 등록하는 것입니다. (이것은 4.x에서 여전히 작동하지만 카테고리 이름에는 더 이상 공백을 포함 할 수 없기 때문에 "JavaScript-global-property"카테고리를 사용해야합니다.) 객체는 nsIClassInfo 인터페이스와 모든 인터페이스를 구현해야합니다. 콘텐츠에 노출하고 싶다. 개체에 액세스하는 콘텐츠 스크립트를 알 수있는 방법이 없으므로별로 유용하지 않습니다.`

0

당신은 웹 확장이 할 수있는, 내가 읽고 더 이상 매니페스트 라인은 항상 '카테고리 자바 스크립트 글로벌 부동산 {속성 이름} {구성 요소 계약 ID}처럼 보일 것입니다 지원을

관련 문제