Závěr

Embedding Gecka je už několik let docela rozšířený – existuje spousta projektů pod MS-Windows, Linuxem, MacOS i Javou – viz Mozilla external projects.

Klady

  • oddělení struktury GUI (content), vzhledu GUI (skin) a použitých textů (locale) – to má za důsledek vysokou skinovatelnost (použití souborů skinů, tzv.theme) a jednoduché spravování textů v různých jazycích
  • celé GUI je zapsáno v XML, CSS a DTD skriptech, lze ho tedy snadno a rychle upravovat – stačí plain-text editor, nemusíme mít žádný vývojový program, nic kompilovat
  • struktura GUI se popisuje XML-like jazykem (XUL), který je přehledný a logicky strukturovaný, takže pro práci s ním stačí znát principy XML a mít po ruce referenčí příručku XUL elementů
  • aplikace může být integrována do webového prohlížeče, nebo naopak můžeme importovat jeho části (typicky bookmarky, seznam aplikací), přitom webový prohlížeč (Mozilla, Firebird, ...), stejně jako různé pluginy, je ke stažení a používání zdarma
  • použitím skinů pro mozillu (resp. theme) dosáhneme jednotné vizáže s ostatními mozillími aplikacemi
  • platformní nezávislost – jediné, co může být závislé na platformě, je implementace XPCOM komponent, ale i tam se tomu (možná ne vždy úplně) můžeme vyhnout používáním pouze XPCOM objektů a platformově nazávislých knihoven
  • možnost downloadu a instalace aplikace přes web – aplikace by pak také mohla měnit svůj vzhled podle serveru, ke kterému je připojena (pouze by byl nutný "refresh" GUI a registrace nových komponent (a přihlášení k nsIObserveru atd.) bez restartu aplikace resp. Mozilly)

Zápory

  • ačkoliv samotné XUL je poměrně jednoduché, v praxi jeho znalost nestačí. Je nutné mít obecný přehled o tom, co je tochrome, umět používatchrome url, znát strukturu RDF a případně znát XBL. Na druhou stranu tyto požadavky přinášejí spoustu výhod – standardizovanou správu GUI a adresaci GUI elementů, širokou škálu funkčností GUI.
  • Mozilla je stále ve vývoji (potíže se zpětnou kompatibilitou však mají všichni), a proto nejsou některá rozhraní ještě prohlášena za uzavřená (FROZEN). Možnost XPCOM nefunkčnosti komponenty v dalších verzích (resp. Mozilly) lze minimalizovat důsledným používáním maker.
  • stále se vyskytují bugy a různé nedokonalosti (I když, který software je bezchybný?) – v mé verzi Mozilly (1.4 - win32) se občas nepřegenerovaly soubory spravující seznam XPCOM komponent (xpti.dat) a GUI komponent (chrome.rdf a adresář overlayinfo).

To byly výhody a nevýhody Gecko embedded aplikací obecně, spíše ve srovnání s aplikacemi, které mají GUI napsané v nějakém vývojovém prostředí a přeložené do binárky.

Následuje zhodnocení Mozilla GUI vs. HTML GUI:

  • XUL je jazyk navržený pro návrh GUI, zatímco HTML jen pro formátování dokumentů. HTML elementy typu formuláře a tlačítka byly dodělány až s rozvojem internetu a používáním HTML, ale stále zůstává struktura dokumentu.
    např. pokud chceme rozložit různé HTML elementy po stránce, jedinou možností je tabulka (tj. prvek dokumentu). XUL nabízí přirozenější elementy jako hbox, vbox, skupinu atd.
  • Naučit se používat XUL je zhruba stejně obtížné jako naučit se HTML. Obdobně je to s CSS. JavaScript se v XUL používá jakoobserver událostí, ne k tvorbě GUI.
  • V XUL lze používat HTML (stačí deklarovat HTML namespace jako atribut XUL elementu nadřazeného skupině HTML elementů – např. takto: xmlns:html = "http://www.w3.org/1999/xhtml" a HTML elementy se pak tagují <html:tag>)
  • nevýhodou je, že musíme distribuovat s aplikací i Gecko a naše aplikace funguje jen na Gecko-based prohlížečích. Uživatelé s jiným prohlížečem mají smůlu (ale zase si můžou Gecko resp. Mozillu zadarmo stáhnout).
    Na druhou stranu, díky tomu naše aplikace vypadá všude stejně, což se o GUI v HTML říct rozhodně nedá.

Download

emb.xpi – download balíčku (použijte kontextové menu nad odkazem – "Save Link As ...")
emb-src.zip – balíček se zdrojovými kódy komponenty (.idl, .h, .cpp)

Informace o původním dokumentu

  • Autor: Jan Ditrich

Štítky a přispěvatelé do dokumentace

Přispěvatelé této stránky: SphinxKnight, Pawell, Majda
Poslední aktualizace od: SphinxKnight,