880 likes | 1.05k Views
Mozilla Firefox Extensions Development Tutorial. 2007 July, SHIMODA Hiroshi. Agenda. Chapter 1 Firefox architecture and technology Chapter 2 The m echanism behind Extensions Chapter 3 Building an Extension. Chapter 1 Firefox architecture and technology. Firefox is closer to a
E N D
Mozilla Firefox Extensions Development Tutorial 2007 July, SHIMODA Hiroshi
Chapter 1Firefox architecture and technology Chapter 2The mechanismbehind Extensions Chapter 3Building an Extension
Chapter 1 Firefox architecture and technology
Firefox is closer to a Web app than a conventional application
Firefox HTA DHTML XUL HTML HTML JavaScript JScript JavaScript XPCOM ActiveX CGI Firefox architecture is very similar to web pages that use Dynamic HTML Structure Control Customized Processes
Keywords ・HTML ・CSS ・JavaScript ・XPCOM
XUL XML-based User-interface Language
XML based User Interface Markup Language
Creates framework of Firefox GUI
<vbox> <hbox> <label value="Make your selection"/> <menulist> <menupopup> <menuitem label="Foo 1" selected="true"/> <menuitem label="Foo 2"/> <menuitem label="Foo 3"/> </menupopup> </menulist> </hbox> <checkbox label="Select items" checked="true"/> <hbox> <label value="Enter text"/> <textbox size="15"/> </hbox> </vbox>
Similar to HTML A GUI widget like an HTML form Simplifies and standardizes GUI widgetsthat were difficult to build using DHTML (Drop-down lists, scrollbars, tabs, etc.) Can be used on the web, not just in Firefox http://piro.sakura.ne.jp/latest/blosxom.cgi/mozilla/index.xul
“Logic” is defined rather than “Style” (Color, font size, etc. are defined using CSS, explained later)
Read code, Understand logic
When defining menus using Java fileMenu = new JMenu(resbundle.getString("fileMenu")); fileMenu.add(new JMenuItem(newAction)): fileMenu.add(new JMenuItem(openAction)): fileMenu.add(new JMenuItem(saveAsAction)): mainMenuBar.add(fileMenu); editMenu = new JMenu(resbundle.getString("editMenu")); editMenu.add(new JMenuItem(undoAction)): editMenu.addSeparator(); editMenu.add(new JMenuItem(cutAction)): editMenu.add(new JMenuItem(pasteAction)): editMenu.add(new JMenuItem(clearAction)): editMenu.addSeparator(); editMenu.add(new JMenuItem(selectAllAction)): mainMenuBar.add(fileMenu); One needs to decipher the code
With XUL, one only needs to look <menubar> <menu label="&fileMenu.label;"> <menupopup> <menuitem label="&fileMenu.new.label;"/> <menuitem label="&fileMenu.open.label;"/> <menuitem label="&fileMenu.save.label;"/> </menupopup> </menu> <menu label="&editMenu.label;"> <menupopup> <menuitem label="&editMenu.undo.label;"/> <menuseparator/> <menuitem label="&editMenu.cut.label;"/> <menuitem label="&editMenu.paste.label;"/> <menuitem label="&editMenu.clear.label;"/> <menuseparator/> <menuitem label="&editMenu.selectAll.label;"/> </menupopup> </menu> </menubar>
Not as straightforward as WYSIWYG, but much more intuitive than writing conventional programs *WYSIWYG = What You See Is What You Get
XUL Specification Resources Mozilla Developer Center (MDC) http://developer.mozilla.org/ XULPlanet.com http://www.xulplanet.com/
CSS Cascading Style Sheets
Stylesheet language used to describe the presentation of XML documents in an easy to read format #content { font-size: 10pt; border-width: 1pt; border-color: red; border-style: solid; }
XUL is also styled using CSS button[type="menu-button"] { -moz-box-align: center; -moz-box-pack: center; margin: 0; border: none; } .button-menu-dropmarker, .button-menubutton-dropmarker { margin: 1px; background-image: url("chrome://global/skin/arrow/arrow-dn.gif"); background-repeat: no-repeat; background-position: center center; min-width:11px; min-height:11px; }
Build the framework using XUL Dress it up using CSS
Same as building a web page
Each part can be altered independently
→“Theme”(or “Skin”) of Firefox
Firefox is controlled by JavaScript
Object-oriented prototype-based language corresponding to ECMAScript(ECMA-262)3rd edition http://www.ecma-international.org/publications/ standards/Ecma-262.htm Not related to Java
JavaScript in Firefox 2 ・JavaScript 1.7 ECMAScript Edition 3 extended ・E4X (ECMAScript for XML) is supported
・Grammar is similar to C (easier to learn) ・Highly flexible ・Untyped variables (almost entirely) ・There is garbage collection ・Not strictly structured like Java etc.
Useful when deployed strategically
XUL and JavaScript
Interoperate using DOM Document Object Model
Controls XML through API of JavaScript objects
Control through properties var checkbox = document.getElementById('check'); check.checked = true;
Control through methods var textbox = document.getElementById('input'); textbox.focus();
Create and append XUL elements var button = document.createElement('button'); button.setAttribute('label', 'button'); box.appendChild(button);
Useful when dynamically displaying message text