탭 열기, 닫기 및 전환을 감지하고 관련 URL을 Firefox 확장 프로그램에서 가져 오는 데 사용해야하는 XPCOM 인터페이스는 무엇입니까? JS의 탭을 관리하는 코드의 인스턴스를 보았지만 C++의 경우는 어떻습니까?C++ XPCOM 확장 기능이있는 Firefox에서 탭에 액세스
3
A
답변
5
nsIObserverService를 사용하여 탭 이벤트를 C++ 구성 요소로 재 라우팅하는 작은 JS 구성 요소를 작성할 수 있습니다.
C++ 코드에서이 스 니펫을 사용하여 구성 요소를 관찰자로 등록하고 탭 이벤트 경로 변경에 사용되는 사용자 정의 이벤트를 등록 할 수 있습니다.
NS_IMETHODIMP MyCppComponent::Observe(nsISupports *aSubject,
const char *aTopic,
const PRUnichar *aData)
{
if(!strcmp(aTopic, "xpcom-startup"))
{
nsCOMPtr<nsIObserverService> observerService =
do_GetService("@mozilla.org/observer-service;1");
observerService->AddObserver(this, "my-tab-open", false);
observerService->AddObserver(this, "my-tab-close", false);
observerService->AddObserver(this, "my-tab-select", false);
}
else if(!strcmp(aTopic, "my-tab-open"))
{
/* . . . */
}
else if(!strcmp(aTopic, "my-tab-close"))
{
/* . . . */
}
else if(!strcmp(aTopic, "my-tab-select"))
{
/* . . . */
}
/* . . . */
}
그리고 당신은 탭 이벤트에 당신이 원하는 데이터를 추출 및 C++ 코드를 실행하는 사용자 정의 이벤트를 발생시킬 수있는 이벤트 핸들러에 가입하려면해야 도우미 JS 구성 요소의
.function tabOpened(event) {
var obsSvc = CC["@mozilla.org/observer-service;1"].
getService(CI.nsIObserverService);
obsSvc.notifyObservers(event.target.linkedBrowser.contentWindow,
"my-tab-open", "some data");
}
function tabClosed(event) {
var obsSvc = CC["@mozilla.org/observer-service;1"].
getService(CI.nsIObserverService);
obsSvc.notifyObservers(event.target.linkedBrowser.contentWindow,
"my-tab-close", "some data");
}
function tabSelected(event) {
var obsSvc = CC["@mozilla.org/observer-service;1"].
getService(CI.nsIObserverService);
obsSvc.notifyObservers(event.target.linkedBrowser.contentWindow,
"my-tab-select", "some data");
}
function contentWndLoad(event) {
var obsSvc = CC["@mozilla.org/observer-service;1"].
getService(CI.nsIObserverService);
var browser = getMostRecentBrowserWindow().getBrowser();
browser.tabContainer.addEventListener("TabOpen", tabOpened, false);
browser.tabContainer.addEventListener("TabClose", tabClosed, false);
browser.tabContainer.addEventListener("TabSelect", tabSelected, false);
}
MyJsComponent.prototype = {
/* . . . */
observe: function(aSubject, aTopic, aData) {
switch(aTopic) {
case "xpcom-startup":
var obsSvc = CC["@mozilla.org/observer-service;1"].
getService(CI.nsIObserverService);
obsSvc.addObserver(this, "toplevel-window-ready", false);
break;
case "toplevel-window-ready":
aSubject.addEventListener("load", contentWndLoad, false);
break;
}
}
/* . . . */
}
또한 특정 사례를 처리하기 위해 추가해야하는 몇 가지 추가 코드가 있습니다. 예를 들어 사용자가 브라우저 창을 닫을 때 열린 창에 TabClose 이벤트가 나타나지 않을 때 ... 더 오래 필요로 할 때 옵저버 등록을 잊지 마세요.
+0
위대한, 정확히 내가 원하는, 예제 코드는 많은 시간을 절약 할 것입니다 !!! 감사합니다. –
관련 문제
- 1. 브라우저 탭에 확장 페이지 표시
- 2. Firefox에서 XPCOM 등록하기. 알 수없는 CID
- 3. PHP 확장 기능이있는 CSS?
- 4. XPCOM C++ : RegExps를 지원합니까?
- 5. Firefox 확장 기능이있는 'Hello World'표시
- 6. 확장 기능이있는 Winform DataGridView 컨트롤
- 7. javascript xpcom 구성 요소에서 C++ xpcom 구성 요소를 사용하는 방법
- 8. Google 크롬에 해당하는 ActiveX/XPCOM
- 9. XPJS (Javascript XPCOM) 설명서?
- 10. DBMS_XSLProcessor는 확장 기능이있는 스타일 시트를 처리합니까?
- 11. 기본 기능이있는 크롬 확장 메모리 돼지
- 12. Firefox 확장 기능이있는 특정 탭만 닫으십시오.
- 13. Firefox XPCOM setTimeout 문제
- 14. Gecko XPCOM 사용 웹킷
- 15. XPCOM, C++에서 Javascript 함수 호출
- 16. C++ XPCOM 구성 요소의 테스트 기반 개발?
- 17. 처리 액세스 기능이있는 직접 디스크 암호화 소프트웨어
- 18. FFCOM +3.0에서 XPCOM 플러그인 지원
- 19. XPCOM : sniff HTTP 응답
- 20. XPCOM 탭 기반 변수
- 21. 크롬 및 XPCOM
- 22. 배경이 모든 탭에 표시됩니다.
- 23. Psql에서 Firefox에서 Postgres를 액세스 할 수있게 만들기
- 24. 웹 페이지의 javascript에 XPCOM 구성 요소를 노출하십시오.
- 25. 확장/축소 기능이있는 테이블의 열에 고정 폭을 설정하는 방법은 무엇입니까?
- 26. SOAP 확장 기능이있는 ASMX 웹 서비스 - 암호화 방법의 문제점
- 27. 크롬 확장 기능이있는 웹 사이트에 로그인하여 데이터를 가져옵니다.
- 28. 확장 개발하여 C/C++
- 29. Chrome 및 Safari 확장 프로그램의 특정 탭에 대한 값을 저장하려면 어떻게해야합니까?
- 30. Firefox에서 '사용자 정의 색 대화 상자 만들기'
왜? 확실히 JS에서해야합니다. – Nickolay