Обработка событий в расширениях Firefox

Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.

Gecko использует события (events) для передачи информации о происходящем во время работы браузера тем модулям, которые желают знать об этом.  События подразделяются на несколько различных категорий. Данная статья поможет Вам узнать основную информацию об этом и даст ссылки на более подробную документацию, описывающую каждую из категорий. Также в этой статье описаны несколько случаев, предоставляющих особый интерес.

Типы событий

Существует множесто типов событий, которые могут использовать авторы приложений и расширений для получения оповещений от элементов браузера (browser) и закладок (tabbrowser) об изменениях, связанных с загруженным в них содержимым.

Простые DOM-события

Для обработки простого DOM-события используйте такой код:

function callback(evt) {
  // Здесь Ваш код. Проверяйте значение evt.target чтобы обрабатывать только нужные события.
}

b.addEventListener("event", callback, false)

В приведенном примере b - это браузер (browser) или закладка (tabbrowser), от которой Вы хотите получать события. Имейте в виду, что события могут приходить от любого фрейма внутри браузера или в случае закладки - от нескольких браузеров с такой закладкой.

Ниже пречислены наиболее интересные DOM-события:

Событие Описание
DOMLinkAdded Генерируется, когда в документе обнаружена новая ссылка (HTML элемент <link>).
DOMTitleChanged Генерируется, когда изменен заголовок страницы.
DOMContentLoaded Генерируется, когда инициализация DOM полностью завершена.
load  Генерируется, когда страница, включая картинки, была полностью загружена.
unload Генерируется, когда пользователь закрыл страницу.
pageshow Генерируется, когда страница показана вновь.
pagehide Генерируется, когда страница скрыта.

Более детально о событиях load, unload, pageshow and pagehide, а также о других событиях читайте в статье Firefox's caching behaviour.

Обработчики процесса загрузки

Для отображения дополнительной информации о ходе загрузки данных из веба можно использовать обработчики процесса загрузки. Они предоставляют детальную информацию о ходе загрузки данных из веба. И браузер (browser) и закладка (tabbrowser) поддерживают следующие конструкции:

var progressListener = {
  // add nsIWebProgressImplementation here
}

b.addProgressListener(progressListener);

Where b is the browser or tabbrowser you want to listen to events for. There are code snippets available that give more detail on using web progress listeners.

For a tabbrowser, the above code will only get events from the browser that is currently displayed at the time the event occurs. In order to listen to events from all browsers, including those not currently being displayed, the following example can be used:

var tabsProgressListener = {
  // add tabs progress listener implementation here
}

gBrowser.addTabsProgressListener(tabsProgressListener);

This lets you receive events related to all tabs. More information about listening to events from all tabs is available.

How events are used by Firefox

The Firefox frontend already listens for a number of these progress events from web pages. Most of this goes on in browser.js.

DOMLinkHandler

The DOMLinkHandler object is called by the DOMLinkAdded event in order to detect any RSS feeds, site icons, or OpenSearch plugins for the web site.

pageShowEventHandlers

The pageShowEventHandlers() function is called by the pageshow event and is used to populate the character set menu and update the UI elements associated with any detected feeds or OpenSearch plugins for the website.

XULBrowserWindow

XULBrowserWindow is an nsIWebProgressListener used to get progress events for the currently visible browser. It is used to update the UI for many different reasons:

  • Update the progress bar and status messages as pages load
  • Turn on and off the throbber as pages load
  • Set the site icon when available
  • Update the address bar as the user navigates
  • Hide notification bars when appropriate as the user navigates
  • Apply the site zoom preferences to newly loading pages
  • Update the bookmarking star button UI
  • Update the identity display as the site's security changes

TabsProgressListener

This object is a tabs progress listener and receives events for all browsers in the window. It is used to detect when a webpage attempts to refresh itself and allow the user to block the attempt.

How events are used by the tabbrowser

tabbrowser maintains a set of objects relating to progress listening for each browser. First it creates a browser-status-filter and adds it as a web progress listener for the browser. Next it creates an internal object to receive all web progress events from the browser. This is created by the method mTabProgressListener(). This receives events from the browser-status-filter. The filter acts to reduce the number of status and progress events to improve performance. The filters are held in the array mFilters, the internal listeners in the array mTabListeners.

The internal listeners are used to send out progress events to listeners registered with addProgressListener() (which receives events from the browser that is currently visible) and addTabsProgressListener() (which receives events from all browsers).

See also

 

Метки документа и участники

 Внесли вклад в эту страницу: rcyber
 Обновлялась последний раз: rcyber,