Gecko는 사용자가 알기 원하는 흥미로운 것들에 대해 정보를 전달하기 위한 이벤트들을 사용합니다. 이벤트들은 여러 종류 를 가지지만, 이 문헌은 여러분이 그것들에 대해 배우고 여러분이 그것들에 대한 더 특정한 문서들을 직접적(쉽게)으로 접근하는데 도와 줄 것입니다. 또 이 문헌은 관심을 가질 만한 몇 가지 케이스를 제공합니다.
이벤트들의 타입들
개발자들은 어플리케이션과 확장기능 안에 포함된 콘텐트의 load와 그 변경에 대해 알기 위해, browser
와 tabbrowser
의 요소들로 부터의 알림을 받을 수 있는데 이것은 여러 이벤트들의 타입들로 가능합니다.
간단한 DOM 이벤트들
DOM 이벤트는 다음과 같은 코드로 등록할 수 있습니다:
function callback(evt) { // Do your processing here. Check evt.target for the target of the event. } b.addEventListener("event", callback, false)
위에서 b는 여러분이 이벤트로부터 보기 원하는
browser
또는 tabbrowser 입니다. 명심해야 할것은 이벤트들은
browser의 프레임이나 또는
tabbrowser
, 브라우저들의 안에 존재해야 될 것입니다.
아래 리스트는 여러분이 여러 상황을 모니터하기 원하는 좀 더 흥미로운 DOM 이벤트들입니다.
이벤트 | 설명 |
DOMLinkAdded |
새로운 HTML <link> 요소를 문서에서 감지했을 때 dispatch됩니다. |
DOMTitleChanged |
페이지의 타이틀이 변경 되었을 때 dispatch됩니다. |
DOMContentLoaded |
페이지의 초기 DOM이 완전히 로드되었을 때 dispatch됩니다. |
load |
dispatch된 후에 페이지가(이미지를 포함하여) 처음으로 로딩을 완료했을 때. |
unload |
유저가 페이지로부터 떨어져 탐색할 때 dispatch됩니다. |
pageshow |
페이지가 새롭게 표시되었을 때 dispacth됩니다. |
pagehide |
페이지가 감춰졌을 때 dispatch됩니다. |
load
, unload
, pageshow
and pagehide 이벤트의 dispatch 유무에 대해서는
Firefox's caching behaviour의 기사에서 더 자세하게 다룹니다.
웹 progress의 listener들
웹 로드들의 자세한 내용을 보려면 web progress listener를 사용하면 됩니다. 이들은 웹에서 데이터 로드의 progress 상황에 대한 자세한 내용을 제공합니다. 아래는 browser
와 tabbrowser를 요소들을 지원하는 코드입니다:
var progressListener = { // add nsIWebProgressImplementation here } b.addProgressListener(progressListener);
위에서 b는 여러분이
이벤트들에 대해 litsen하기 원하는
browser
또는 tabbrowser 입니다.
using web progress listeners의 링크는 코드 snippet의 더 자세한 사용 가능을 다룹니다.
tabbrowser는 오직 현재 이벤트가 발생할 때 표시하는 브라우저부터 이벤트들을 받을 수 있습니다. 모든 브라우저들로부터 이벤트들을 listen하기 위해서는 현재 이벤트에 대해 표시하지않는 코드를 포함하면 됩니다. 아래는 그 예를 설명합니다:
var tabsProgressListener = { // add tabs progress listener implementation here } gBrowser.addTabsProgressListener(tabsProgressListener);
이렇게 하면 여러분은 모든 tab들과 관련된 이벤트들을 받을 수 있습니다. listening to events from all tabs 링크는 더 자세한 사용 가능을 다룹니다.
모든 탭들로부터 이벤트들을 listen하는 능력은 Firefox 3.5. 버전에 포함 되었습니다.
파이어폭스에서는 이벤트들을 어떻게 처리하는가
파이어 폭스에서는 이미 어느 정도 progress 이벤트들을 웹 페이지들로 부터 listen합니다. 이 중 대부분은 browser로 가게됩니다.js.
DOMLinkHandler
DOMLinkHandler 오브젝트는
어떤 RSS 피드들이나 사이트 아이콘들, 또는 웹 사이트에 대한 오픈서치 플러그인을 감지하기 위한 DOMLinkAdded 이벤트라고 할 수 있습니다.
pageShowEventHandlers
pageShowEventHandlers()
함수는 메뉴에 문자세트를 삽입하거나 피드(feed)들을 감지 또는 웹 사이틀을 위한 오픈서치 플러그인과 관련된 UI 요소들의 업데이트 등의 pageshow 이벤트라고 할 수 있습니다.
XULBrowserWindow
이 오브젝트는 현재 브라우저에 표시되고 있는 이벤트들의 progress를 얻기 위한 nsIWebProgressListener
입니다. 이 오브젝트는 아래와 같은 많은 이유로 UI를 업데이트하기 위해 사용합니다:
- progress 바의 업데이트와 페이지를 불러오는 과정의 status 메시지
- 페이지를 로드 할 때의 실행색인기를 켜고 끔.
- 사이트 아이콘을 배치할 때
- 사용자가 인터넷을 이용 할 때 주소창의 업데이트
- 사용자가 인터넷을 항해 할 때 알림 표시줄을 적절한 때에 숨기기
- 페이지들를 새로고침 하여도 사이트를 확대해서 보는 설정을 그대로 적용하기.
- 북마크 버튼 UI을 활성화 하기.
- 사이트의 보안 변경에 대한 표시를 알릴 때.
TabsProgressListener
이 오브젝트는 탭들의 progress listener 와 윈도우 안의 모든 브라우저에 대한 이벤트들을 받을 수 있습니다. 웹페이지가 새로고침을 시도할 때나 이를 저지하려는 시도를 사용자가 허락 할 때를 감지하는데 사용됩니다.
tabbrowser는 이벤트를 어떻게 처리하는가
tabbrowser는
두가지 모드 중 한가지로 실행됩니다. 처음에는 non-tabbed 모드로 시작하고 이 모드는 아래와 같은 상황이 발생하기 전까지 유지 됩니다.
- 탭바가 보여질 때
- 탭이 추가되었을 때
- 한개 보다 많은 webprogress listener가 추가 되었을 때
- 탭 progress listener가 추가 되었을 때
Non-tabbed 모드
non-tabbed 모드에서, tabbrowser는
오직 하나의 탭만이 존재 할 수 있습니다. 이 모드에서는 단 하나의 web progress listener만이 브라우저로부터 progress 이벤트의 listen을 추가할 수있습니다. 첫째로 browser-status-filter를 만들고 브라우저에 대한
web progress listener를 추가 합니다. 다음은 브라우저로부터 모든 web progress 이벤트들을 받기 위한 내부 오브젝트를 만듭니다. 이는 mTabProgressListener()
메소드가 처리합니다. 이것은 browser-status-filte로부터 이벤트들을 받습니다.
필터 성능 향상을 위해 진행 상태 및 이벤트의 수를 줄이는 역할을 합니다. 필터들은
mTabListeners가 배열된 내부
listener와
mFilters의 배열
로 도움을 받습니다. 내부
listener들은 progress 이벤트들을 addProgressListener()
(현재 보이는 브라우저부터 받은 이벤트들)와 addTabsProgressListener()
(모든 브라우저로부터 받은 이벤트들)가 지정된 listener들로 내보내게 됩니다.