Недавно решил немного разобраться как расширяется Firefox (навеяло конкурсом от Mozilla). По ходу сделал небольшой конспект - может когда нибудь пригодиться или будет кому-то интересно.
Часть первая. Firefox из нутри.
Firefox предоставляет несколько основных путей для своего расширения, каждый из которых отличается не только по назначению, но и способом создания: плагины (plugins), расширения (extensions), тулзы для поиска (search engines, search plugins). Все вместе это называется add-ons. Плагины - это бинарные компоненты, которые помогают браузеру отображать специфические данные, например, pdf-файлы. В отличие от них, расширения добавляют новую функциональность и позволяют изменять пользовательский интерфейс (например, какой-нибудь хитрый поиск по открытому документу при нажатии большой красной кнопки на статус-баре). Отдельно стоят search plugins -плагины, которые специализируются только на поиске.
Плагины и поисковые тулзы - довольно специфичны, поэтому, в ввиду более вероятного использования, для меня интересны только extensions. Но прежде, мне стало интересно, как работает Firefox и где у него находятся точки входа для всех видов расширений.
Исходя из Conceptual Architecture of Firefox и Firefox Concrete Architecture, браузер состоит из нескольких составных: GUI, Browser Engine (функциональность браузера - инициирование загрузки ULR, refresh, forward, back..), Rendering Engine (отрисовка контента и GUI браузера), Data Persistent (настройки пользователя), Networking (поддержка различных протоколов, кэширование, кодировки, безопасность), JavaScript interpreter, XML parser, Display Backend. Browser Engine и Rendering Engine в Firefox представлены одним модулем - Gecko.
Все, что мы видим, запуская Firefox - результат работы Gecko. Он рендерит не только контент браузера но и GUI. Для поддержки различных диалектов XML и HTML, Gecko использует XML-парсер (Expat). Одним из таких диалектов является XUL (читается "зул") - кроссплатформенный XML-based язык для описания пользовательского интерфейса. С XUL тесно связан XPToolkit - набор XUL-виджетов, таких как тулбары, меню, кнопки и т.д. Если XUL - это совокупность правил, атрибутов, элементов и связей между ними, то XPToolkit - это строительный материал для GUI, выраженный в понятиях XUL. Парсер представляет XUL в виде надмножества DOM - Application Object Model (AOM) - иерархия виджетов (браузер, меню, элемент меню и т.д.). Таким образом, для Gecko не имеет значения, что он получает на входе - XML, XUL или HTML.
Для работы с JavaScript, Gecko использует JavaScript интерпретатор - SpiderMonkey. 
Теперь становиться понятно, какое место занимают плагины, а какое - расширения. Плагины занимаются рендерингом, значит должны взаимодействовать непосредственно с Gecko, использовать его API (Gecko Plugin API). Расширения меняют пользовательский интерфейс и добавляют новые фичи, значит должны подсовывать Gecko соответствующие XUL-файлы и JavaScript'ы, соовокупность которых и будет расширением.
Но есть один ньюанс, связанный с безопасностью. Все, что загружается из веба, имеет довольно ограниченные права, например, нельзя читать файлы с диска, нет доступа к данным пользователя. Поэтому, файлы расширений запускаются только с локального диска из директории chrome. Доступ к ним осуществляется при помощи специального URI: chrome://package_name/data_type/file_path,
где
Загруженные таким образом файлы получают неограниченные права (chrome-privileges). Вообще, chrome, в терминологии Mozilla - это все, что не веб-контент, а именно, GUI и все, с ним связанное (xul, js, css и т.д.). Основные типы chrome:
Для того, что бы chrome был доступен, его надо зарегестрировать в chrome-реесте в виде plain-текста (файл chrome.manifest). Как это делается и как создать минимальное расширение - в следующем посте.
Ссылки:
Conceptual Architecture of Firefox
Firefox Concrete Architecture
XUL Tools and What They Mean
Mozilla developer center
среда, 2 апреля 2008 г.
Расширения Firefox #1
Автор:
sash_ko
на
07:05
2
коммент.
Ярлыки: Firefox
пятница, 14 сентября 2007 г.
Clipmarks
Наткнулся сегодня на Clipmarks - сервис, позволяющий сохранять любые куски веб-страниц. Работает очень просто, утанавливаеш расширение для Firefox'a (или другого браузера), создаеш себе аккаунт на сайте Clipmarks для хранения выделенного, выделяеш нужный кусок текста или картинку, нажимаеш clip, а после всех clip'ов - Save. Все. Посмотреть, то что было выделено можно на сайте.
Попробовал - вроде работает и даже показалось полезным. Но есть пару неудобств: работает что-то не очень шустро и для сохранения надо выполнить слишком много манипуляций.
Автор:
sash_ko
на
15:43
1 коммент.
Ярлыки: Firefox
пятница, 17 августа 2007 г.
The Bookmark Synchronizer
Сегодня обнаружил синхронизатор закладок для Firefox'a Foxmarks. На первый взгяд, удобная штука и простая в использовании. Посмотрим как будет вести себя дальше :) Отзывы восновном положительные.
Автор:
sash_ko
на
10:04
0
коммент.
Ярлыки: Firefox