Technologie

Transkrypt

Technologie
Tworzenie rozszerzeń dla
aplikacji Mozilla Firefox
Michał Sadowski
Plan prezentacji
•
•
•
•
•
•
•
•
•
Wstęp
Technologie
Struktura rozszerzeń
Instalacja
Chrome
Skin
Narzędzia
Podsumowanie
Bibliografia
Wstęp
Mozilla Firefox
• Jedna z najpopularniejszych
przeglądarek internetowych
• Produkt freeware’owy
• Open-source
• Duży nacisk na feedback ze strony
użytkowników
• Lokalizacja generowana jest przez
samych użytkowników
• Największy konkurent MS Explorer
• Wsparcie wielkich firm takich jak Sun
Microsystems, IBM, Apple czy Adobe
Wstęp
Czym są rozszerzenia?
• Definicja
Rozszerzenia są aplikacjami, które zmieniają lub rozszerzają funkcjonalność
programów opartych o kod Mozilli. Zazwyczaj są dystrybuowane w postaci
samoinstalujących się archiwów XPI.
• Najpopularniejsze rozszerzenia
Bookmarks Synchroniser - Aplikacja ta umożliwia przechowywanie zakładek ze
stronami w trybie online w pliku XBL automatycznie ściągając je na komputer, na
którym uruchamiamy Firefoksa.
Foxy Tunes – Rozszerzenie umożliwia słuchanie muzyki w czasie przeglądania stron
bez przełączania okien.
Sage RSS Reader - Umożliwia większą kontrolę nad źródłami wiadomości RSS i ich
organizacją.
Technologie
• XUL (XML User-Interface Language) - Definiuje wygląd ekranu interfejsu
użytkownika i dołącza do niego skrypty i style.
• Javascript - Główny język skryptowy, na bazie którego zbudowana jest Mozilla
Firefox. Większość rozszerzeń pisana jest w tym właśnie języku.
• DOM (Document Object Model) - Używany do manipulowania XUL’em w czasie
rzeczywistym.
• XPCOM (Cross-Platform Component Object Model) – Umożliwia dostęp do
pełnej struktury aplikacji Mozilla Firefox, włącznie z dostępem do ustawień oraz
systemu plików.
• CSS (Cascading Style Sheets) - Odpowiada za style interfejsu, jak i dołączanie
wiązań XBL do dokumentów XUL.
• XBL (XML Binding Language) - Rozszerza XUL, pozwalając na kreowanie nowych
obiektów.
• RDF (Resource Description Framework) - Używany jako format przechowywania
danych w niektórych częściach Mozilli Firefox oraz w niektórych rozszerzeniach.
Technologie
XUL
• Jego powstanie miało na celu ułatwienie i przyspieszenie projektowania
Mozilli.
• Jest to język rodziny XML, a zatem udostępnia wszystkie możliwości, które
udostępnia jego przodek
• Zaprojektowany z myślą o tworzeniu łatwo przenośnych interfejsów
użytkownika
• Może korzystać z innych języków takich jak MathML lub SVG
• Wyświetlany tekstujest łatwo lokalizowalny
• Prostota wykorzystywania szablonów styli
• Elementy interfejsu przygotowane w XUL’u są łatwe do podglądu poprzez
otwarcie ich za pomocą przeglądarki
• Przykładowe elementy możliwe do wytworzenia za pomocą XUL’a:
–
–
–
–
–
–
Kontrolki wejścia (textbox, checkbox)
Paski narzędzi wraz z przyciskami i zawartością
Menu w pasku menu oraz pop-up menu
Dialogi przełączane tabulatorem
Drzewa o strukturach hierarchicznej i tabelarycznej
Skróty klawiszowe
Technologie
XUL – Przykładowy dokument
Przykładowy dokument XUL:
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<box align="center">
<label value="Witaj, świecie!" />
</box>
</window>
Technologie
Document Object Model
• Document Object Model stanowi API dla dokumentów HTML i XML
• Zapewnia strukturalną reprezentacje dokumentów
• Łączy wyświetlane strony ze skryptami oraz językami
programowania
• Zorganizowany w obiekty
• Obiekty są dostępne za pomocą skryptów
• Mimo że jest mocno powiązany z JavaScriptem, może być tworzony
z myślą o dowolnym języku
• Standard W3C DOM
Technologie
XPCOM
• Zaprojektowany dla Netscape Communicator
• Komponenty Mozilli są komponentami XPCOM
• XPCOM (Wieloplatformowy Obiektowy Model Komponentu, CrossPlatform Component Object Model) został początkowo utworzony
jako część projektu Mozilla, ale obecnie używany jest przez wiele
różnych projektów
• XPCOM jest lekkim wieloplatformowym wariantem szeroko znanego
Obiektowego Modelu Komponentu (Component Object Model, COM)
• Obsługuje każdą platformę sprzętową (Microsoft Windows, Linux,
HP-UX, AIX, Solaris, OpenVMS, MacOS, BSD)
Technologie
CSS i XBL
• CSS posiada specyficzną dla Mozilli Firefox listę własności (mozappearance, moz-background-clip, moz-binding, moz-border-radius)
• XUL nie umożliwia zmiany funkcjonalności istniejących elementów,
tu z pomocą przychodzi XBL
• XBL należy do rodziny języków XML’owych
• Plik XBL zawiera szereg wiązań, z których każde opisuje działanie
poszczególnego widget’u XUL
• XBL i CSS współdziałają poprzez własność -moz-binding
Technologie
CSS i XBL - Przykład
Przykładowy dokument XBL:
<?xml version="1.0"?>
<bindings xmlns="http://www.mozilla.org/xbl">
<binding id="binding1">
<!-- tu wstawiamy zawartość, własności, metody i
opisy zdarzeń -->
</binding>
<binding id="binding2">
<!-- tu wstawiamy zawartość, własności, metody i
opisy zdarzeń -->
</binding>
</bindings>
Technologie
RDF
• RDF to bazujący na grafach model opisujący zasoby internetowe
(takie jak strony www, maile) oraz ich wzajemne relacje
• W Mozilla Firefox służy do integracji i organizacji zasobów
internetowych
• RDF Model wraz z szablonami XUL służy przede wszystkim jako „API”
do wyświetlania informacji
• Odpowiada on również za składnie serializacji
• RDF jest również używany do tworzenia multi-platformowych baz
danych służących przechowywaniu niewielkich pamięciowo danych
Struktura rozszerzeń
• Rozszerzenia są rozprowadzane jako pliki XPI
• Pliki XPI są to archiwa spakowane według algorytmu zip
• W środku zawsze się znajduje plik install.js, który jest instalatorem
dodatku w przeglądarce
• Czasem może także występować plik z tekstami dla instalatora
(locale.inf) albo plik z początkowymi ustawieniami rozszerzenia
• Właściwy kod dodatku umieszczony jest w katalogach lub jako
archiwum jar, w którym te katalogi są spakowane
• Jar'y także są pakowane według algorytmu zip
• Zazwyczaj można spotkać 3 katalogi:
–
–
–
Locale – gdzie znajdują się spakowane archiwa językowe, kodowane w
standardzie UTF-8
Skin – gdzie znajdują się elementy graficzne rozszerzenia
Content – właściwy kod rozszerzenia
Instalacja
Plik instal.rdf
• Instalacja opiera się na pliku install.rdf, który dołączony jest do
archiwum xpi
• W przypadku, kiedy ścieżki do plików instalacyjnych zawarte w pliku
install.rdf są błędnie podane, instalacja zostanie przerwana
• Plik ten determinuje lokalizacje poszczególnych części składowych
rozszerzenia
• Plik posiada również identyfikator rozszerzenia, który odróżnia je od
innych
• Identyfikator znajduje się w tagu <em:id> i generowany jest na
podstawie standardu „registry” GUID.
• Do generowania identyfikatora może posłużyć aplikacja Microsoft
GUIDgen
• Przykładowy identyfikator ma postać:
{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
Instalacja
Plik instal.rdf
Microsoft GUIDGen
Instalacja
Przykładowy plik instal.rdf
<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description about="urn:mozilla:install-manifest">
<em:id>{XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}</em:id>
<em:name>Sample Extension</em:name>
<em:version>1.0</em:version>
<em:description>A sample extension with advanced features</em:description>
<em:creator>Your Name Here</em:creator>
<em:targetApplication>
<Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>0.9</em:minVersion>
<em:maxVersion>1.0</em:maxVersion>
</Description
</em:targetApplication>
<em:file>
<Description about="urn:mozilla:extension:file:sampleext.jar">
<em:package>content/</em:package>
<!-- optional items -->
<em:skin>skin/classic/</em:skin>
<em:locale>locale/en-US/</em:locale>
<em:locale>locale/ru-RU/</em:locale>
</Description>
</em:file>
</Description>
</RDF>
Instalacja
Przykładowy plik instal.rdf - dodatki
<!-- optional items -->
<em:contributor>A person who helped you</em:contributor>
<em:contributor>Another one</em:contributor>
<em:homepageURL>http://sampleextension.mozdev.org/</em:homepageURL>
<em:optionsURL>chrome://sampleext/content/settings.xul</em:optionsURL>
<em:aboutURL>chrome://sampleext/content/about.xul</em:aboutURL>
<em:iconURL>chrome://sampleext/skin/mainicon.png</em:iconURL>
<em:updateURL>http://sampleextension.mozdev.org/update.rdf</em:updateURL>
Chrome (1)
• Chrome zawiera części interfejsu użytkownika okna aplikacji, wyłączając te
związane z zawartością
• Przykładami części Chrome’a są paski narzędziowe, paski menu, paski
postępu, nagłówki tytułowe okien etc
• Chrome Providers – dostarczają elementy chrome’a dla konkretnych typów
okien. Wyróżniamy następujących Chrome Providerów:
–
–
–
Content – główny plik źródłowy pochodzi właśnie od tego providera i może to być
dowolny plik widzialny dla Mozilli. Standardowo jest to plik XUL. Dostarcza on
również plików JavaScript oraz XBL
Locale – lokalizowalne aplikacje trzymają tu wszystkie swoje informacje.
Pozwala to translatorom na podłączenie różnych archiwów chrome, co pozwala
na tłumaczenie rozszerzenia bez edycji kodu źródłowego. Dwa główne typy w
jakich zapisywane są pliki do lokalizacji to DTD oraz właściwości oparte java-style
Skin – ten provider zapewnia kompletny zbiór plików, które opisują wygląd
chrome’a. Zazwyczaj są to pliki CSS oraz pliki obrazów
Chrome (2)
Przykładowy plik about.xul
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window class="dialog” title="Hello, world! – About” orient="vertical”
autostretch="always" onload="sizeToContent()”
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<groupbox align="center" orient="horizontal">
<vbox>
<text value="Hello, world!" style="font-weight: bold; font-size: x-large;"/>
<text value="ver. 0.1"/>
<separator class="thin"/>
<text value="Created By:" style="font-weight: bold;"/>
<text value="Eric Hamiter" class="url"
onclick="window.open('http://extensions.roachfiend.com'); window.close();"/>
<text value="Home Page:" style="font-weight: bold;"/>
<text value="http://extensions.roachfiend.com/" class="url"
onclick="window.open('http://extensions.roachfiend.com/'); window.close();"/>
</vbox>
</groupbox>
<hbox>
<spacer flex="1"/>
<button label="Close" oncommand="window.close();"/>
</hbox>
</window>
Chrome (3)
Przykładowy plik about.xul
Chrome (4)
Przykładowy plik contents.rdf
<?xml version="1.0"?>
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:chrome="http://www.mozilla.org/rdf/chrome#">
<RDF:Seq RDF:about="urn:mozilla:package:root">
<RDF:li RDF:resource="urn:mozilla:package:helloworld"/>
</RDF:Seq>
<RDF:Seq RDF:about="urn:mozilla:overlays">
<RDF:li RDF:resource="chrome://browser/content/browser.xul"/>
<RDF:li RDF:resource="chrome://navigator/content/navigator.xul"/>
</RDF:Seq>
<RDF:Seq RDF:about="chrome://browser/content/browser.xul">
<RDF:li>chrome://helloworld/content/helloworldOverlay.xul</RDF:li>
</RDF:Seq>
<RDF:Seq about="chrome://navigator/content/navigator.xul">
<RDF:li>chrome://helloworld/content/helloworldOverlay.xul</RDF:li>
</RDF:Seq>
<RDF:Description RDF:about="urn:mozilla:package:helloworld” chrome:displayName="Hello,
world! 0.1"
chrome:author="Eric Hamiter" chrome:authorURL="mailto:[email protected]"
chrome:name="helloworld" chrome:extension="true" chrome:description="Displays
an alert message via right-click or Tools menu.">
</RDF:Description>
</RDF:RDF>
Chrome (5)
Przykładowy plik helloworldOverlay.xul
<?xml version="1.0"?>
<overlay id="helloworldOverlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only
.xul">
<script type="application/x-javascript"
src="chrome://helloworld/content/helloworldOverlay.js">
</script>
<popup id="contentAreaContextMenu">
<menuitem id="helloworld" label="Hello, world!" accesskey="H"
insertafter="context-stop" oncommand="hello();"/>
</popup>
<menupopup id="menu_ToolsPopup">
<menuitem insertafter="devToolsSeparator" label="Hello, world!"
accesskey="H" oncommand="hello();" />
</menupopup>
</overlay>
Chrome (6)
Najprostrzy przykład pliku JavaScript
// This is our javascript, which will pop up our message
// in an alert box.
function hello() {
alert("Hello, world!");
}
Skin
• Pliki Skin’a definiują widgety zawarte w plikach XUL
• Pliki obrazów, pliki CSS oraz inne używane przy tworzeniu stron www
• Przykładowy plik CSS:
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
#searchfield {
-moz-appearance: none;
font: icon;
width: 170px;
height: 22px;
border: none !important;
padding: 4px 12px 0 33px;
margin-right: 5px;
margin-left: 5px;
background: transparent url(chrome://simpledictionary/skin/searchicon.png) top
left no-repeat; }
Narzędzia
• IDE: Eclipse
• Edytor: Eclipse Colorer, Infox, Macromedia
Dreamweaver
• Narzędzie do tworzenia buildów: Ant
• Narzędzia wersjonowania: CVS,Subversion,RCS
• Narzędzie zarządzania projektem: Maven
Podsumowanie
•
•
•
•
•
•
•
•
Rozszerzenia to ogromna zaleta przeglądarki Mozilli
Wydatne zwiększenie funkcjonalności produktu
Personalizacja przeglądarki
Zwiększenie szybkości dostępu do informacji
znajdujących się w internecie
Ułatwienie korzystania z przeglądarki
Open-source jako silnik rozwoju
Bogata baza przykładowych rozszerzeń
Przyszłość przeglądarek internetowych
Bibliografia
•
•
•
•
•
•
•
•
•
MozillaZine.org
Mozilla.org
Mozdev.org
Mozillapl.org
Roachfiend.com - Eric Hamiter 2004-2005
XULPlanet.com
Bolinfest.com - Michael Bolin
BusinessLogs.com
MozillaZine.org
Q&A
Dziękuję za uwagę

Podobne dokumenty