2011-03-01 7 views
4

Firefox가 시작될 때와 Firefox가 시작된 후 새 탭이 추가 될 때마다 새 탭이 열릴 때마다 뭔가를하려고합니다. 나는의 예를 다음 봤는데 : 탭 열기/닫기 듣기 및 기존 탭 처리

https://developer.mozilla.org/en/Code_snippets/Tabbed_browser

그래서 나는

var container = gBrowser.tabContainer; 
container.addEventListener("TabOpen", tabAdded, false); 
container.addEventListener("TabClose", tabClosed, false); 

function tabAdded(event) { 
alert("tabAdded!"); 
var browser = gBrowser.getBrowserForTab(event.target); 
browser.pollingService = new PollingService(createGuid()); 
browser.pollingService.start(); 
} 

이 그리고 가까운에 대한 유사한 기능을 가지고있다. 탭이 실제로 열리거나 닫히면 잘 작동하지만 몇 가지 문제가 발생합니다.

먼저 Firefox가 열리면 초기 탭이 이미 열려 있지만 tabAdded 이벤트는 실행되지 않습니다. 마찬가지로 firefox를 종료하면 해당 탭에 대해 TabClose가 실행되지 않습니다.

이 경우 올바른 작업은 gBrowser.tabContainer에있는 모든 탭을 살펴보고 내 서비스를 추가하고 Firefox가 닫힐 때와 유사한 작업을 수행하는 것입니다. 불행하게도, 파이어 폭스가 닫힐 때를 알아내는 방법을 잘 모르겠다. (이 문제를 해결할 더 좋은 방법이있을 수도 있지만, 나는 그것을 생각할 수 없다.)

둘째, 초기화 스크립트가 실행될 때 gBrowser.tabContainer가 초기화되지 않을 수 있습니다. 청취자를 언제 tabContainer에 안전하게 추가 할 수 있는지를 청취해야하는 특정 이벤트가 있습니까?

답변

4

로드 이벤트 리스너를 사용하면 Tab 이벤트 리스너를 추가하고 기존 탭에 대한 폴링 서비스를 작성할 수있는 창 시간을 제공 할 수 있습니다. 그런 다음 언로드 이벤트 리스너를 사용하여 정리하십시오.

+0

하지만 물건을 여는 대신 웹 페이지가 변경 될 때마다로드/언로드 이벤트가 실행되지 않습니까? 페이지가 바뀌고 파이어 폭스가 실제로 초기화/정리를 수행 할시기를 알기 위해 파이어 폭스가 실제로 열리고 닫힐 때를 어떻게 구별 할 수 있습니까? – DivineWolfwood

+0

일반 이벤트 리스너를 (크롬) 창에 추가하면 콘텐츠 창에서 거품이 나오지 않기 때문에 크롬 창에 대한로드 및 언로드 이벤트 만 표시됩니다. (실제로 콘텐츠 창이 필요하면 콘텐츠 창에서 캡처 할 수 있습니다.) – Neil

+0

아, 그게 열리는 것처럼 보이지만 아직 언로드에 문제가 있습니다. 나는 후크를 걸었습니다 : \t \t window.addEventListener ("beforeunload", this.handleTabClosing, false); 그러나 handleTabClosing의 경고는 실제로 실행되지 않습니다. beforeunload 내가 여기 듣고 싶은 이벤트 맞지? – DivineWolfwood

관련 문제