mozilla firefox extensions development tutorial

88
Mozilla Firefox Extensions Development Tutorial 2007 July, SHIMODA Hiroshi

Upload: jason

Post on 27-Jan-2016

60 views

Category:

Documents


0 download

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Mozilla Firefox Extensions Development Tutorial

Mozilla FirefoxExtensions

DevelopmentTutorial

2007 July, SHIMODA Hiroshi

Page 2: Mozilla Firefox Extensions Development Tutorial

Agenda

Page 3: Mozilla Firefox Extensions Development Tutorial

Chapter 1 Firefox architectureand technology

Chapter 2 The mechanism behind Extensions

Chapter 3 Building an Extension

Page 4: Mozilla Firefox Extensions Development Tutorial

Chapter 1Firefox architecture

and technology

Page 5: Mozilla Firefox Extensions Development Tutorial

Firefoxis closer to a

Web appthan a conventional

application

Page 6: Mozilla Firefox Extensions Development Tutorial

Firefox architecture is very similar to web pages that use Dynamic HTML

Firefox

XULXUL

JavaScriptJavaScript

XPCOMXPCOM

HTA

HTMLHTML

JScriptJScript

ActiveXActiveX

DHTML

HTMLHTML

JavaScriptJavaScript

CGICGI

Structure

Control

CustomizedProcesses

Page 7: Mozilla Firefox Extensions Development Tutorial

Keywords・ HTML・ CSS・ JavaScript・ XPCOM

Page 8: Mozilla Firefox Extensions Development Tutorial

XULXML-based

User-interfaceLanguage

Page 9: Mozilla Firefox Extensions Development Tutorial

XML basedUser Interface

Markup Language

Page 10: Mozilla Firefox Extensions Development Tutorial

Creates frameworkof Firefox GUI

Page 11: Mozilla Firefox Extensions Development Tutorial

<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>

Page 12: Mozilla Firefox Extensions Development Tutorial

Similar to HTML

A GUI widget like an HTML form

Simplifies and standardizes GUI widgets that were difficult to build using DHTML(Drop-down lists, scrollbars, tabs, etc.)

Can be used on the web, not just in Firefoxhttp://piro.sakura.ne.jp/latest/blosxom.cgi/mozilla/index.xul

Page 13: Mozilla Firefox Extensions Development Tutorial

HTML-like use of XUL

Page 14: Mozilla Firefox Extensions Development Tutorial

XUL allows a variety of widgets

Page 15: Mozilla Firefox Extensions Development Tutorial

“Logic” is definedrather than “Style”

(Color, font size, etc. are defined using CSS, explained later)

Page 16: Mozilla Firefox Extensions Development Tutorial

Benefits

Page 17: Mozilla Firefox Extensions Development Tutorial

Read code,Understand logic

Page 18: Mozilla Firefox Extensions Development Tutorial

When defining menus using JavafileMenu = 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

Page 19: Mozilla Firefox Extensions Development Tutorial

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>

Page 20: Mozilla Firefox Extensions Development Tutorial

Not as straightforward asWYSIWYG, but much more

intuitive than writingconventional programs*WYSIWYG = What You See Is What You Get

Page 21: Mozilla Firefox Extensions Development Tutorial

Summary

Application Logic

Regular app C++, etc.

Web app HTML

Firefox XUL

Page 22: Mozilla Firefox Extensions Development Tutorial

Mozilla Developer Center (MDC)http://developer.mozilla.org/

XULPlanet.comhttp://www.xulplanet.com/

XUL Specification Resources

Page 23: Mozilla Firefox Extensions Development Tutorial
Page 24: Mozilla Firefox Extensions Development Tutorial

CSSCascading

StyleSheets

Page 25: Mozilla Firefox Extensions Development Tutorial

Stylesheet language used to describethe presentation of XML documents

in an easy to read format

#content { font-size: 10pt; border-width: 1pt; border-color: red; border-style: solid;}

Page 26: Mozilla Firefox Extensions Development Tutorial

XUL is also styled using CSSbutton[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;}

Page 27: Mozilla Firefox Extensions Development Tutorial

Build the framework using XULDress it up using CSS

Page 28: Mozilla Firefox Extensions Development Tutorial

Same as buildinga web page

Page 29: Mozilla Firefox Extensions Development Tutorial

Benefits

Page 30: Mozilla Firefox Extensions Development Tutorial

Clean separation of presentation from application logic

Page 31: Mozilla Firefox Extensions Development Tutorial

Therefore

Page 32: Mozilla Firefox Extensions Development Tutorial

Each part can bealtered independently

Page 33: Mozilla Firefox Extensions Development Tutorial

→“Theme”(or “Skin”) of Firefox

Page 34: Mozilla Firefox Extensions Development Tutorial

SummaryApplication

LogicPresentation

Regular app C++, etc. C++, etc.

Web app HTML CSS

Firefox XUL CSS

Page 35: Mozilla Firefox Extensions Development Tutorial
Page 36: Mozilla Firefox Extensions Development Tutorial

JavaScript

Page 37: Mozilla Firefox Extensions Development Tutorial

Firefox iscontrolled by

JavaScript

Page 38: Mozilla Firefox Extensions Development Tutorial

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

Page 39: Mozilla Firefox Extensions Development Tutorial

JavaScript in Firefox 2

・ JavaScript 1.7 ECMAScript Edition 3

extended

・ E4X ( ECMAScript for XML ) is supported

Page 40: Mozilla Firefox Extensions Development Tutorial

・ Grammar is similar to C (easier to learn)

・ Highly flexible

・ Untyped variables (almost entirely)

・ There is garbage collection

・ Not strictly structured like Java

etc.

Page 41: Mozilla Firefox Extensions Development Tutorial

Useful when deployed

strategically

Page 42: Mozilla Firefox Extensions Development Tutorial

XULand

JavaScript

Page 43: Mozilla Firefox Extensions Development Tutorial

DOMDocument

ObjectModel

Interoperate using

Page 44: Mozilla Firefox Extensions Development Tutorial

Controls XML throughAPI of

JavaScript objects

Page 45: Mozilla Firefox Extensions Development Tutorial

Control through propertiesvar checkbox = document.getElementById('check');check.checked = true;

Page 46: Mozilla Firefox Extensions Development Tutorial

Control through methods

var textbox = document.getElementById('input');textbox.focus();

Page 47: Mozilla Firefox Extensions Development Tutorial

Create and append XUL elements

var button = document.createElement('button');button.setAttribute('label', 'button');box.appendChild(button);

Page 48: Mozilla Firefox Extensions Development Tutorial

Useful whendynamically displaying

message text

Page 49: Mozilla Firefox Extensions Development Tutorial

Summary

Application Logic

PresentationConditional

tasks

Regular app C++, etc. C++, etc. C++, etc.

Web app HTML CSSJavaScript

JscriptFirefox XUL CSS JavaScript

Page 50: Mozilla Firefox Extensions Development Tutorial
Page 51: Mozilla Firefox Extensions Development Tutorial

XPCOMCross

PlatformComponent

ObjectModel

Page 52: Mozilla Firefox Extensions Development Tutorial

Is a concept that binds together

Page 53: Mozilla Firefox Extensions Development Tutorial

Platform independent framework

for component development

Page 54: Mozilla Firefox Extensions Development Tutorial

Componentsdeveloped based on

this framework

Page 55: Mozilla Firefox Extensions Development Tutorial

Functionalityoffered by

these components

Page 56: Mozilla Firefox Extensions Development Tutorial

・ Platform independent framework for component development

・ Components developed based on this framework

・ Functionality offered by these components

Page 57: Mozilla Firefox Extensions Development Tutorial

XPCOM examplensIFile::create( in unsigned long type, in unsigned long permissions)

・ Creates a file・ Has two parameters File type (File or Directory) Permission (UNIX-style)

=> Permission value is ignoreddepending on the environment

Page 58: Mozilla Firefox Extensions Development Tutorial

Performs 3 functions in Firefox

Page 59: Mozilla Firefox Extensions Development Tutorial

1Can focus on development

while ignoringlanguage differences

Page 60: Mozilla Firefox Extensions Development Tutorial

2Absorbs platform

dependent differences

Standardized API to handlemultiple platforms→Simplifies Firefox development

Page 61: Mozilla Firefox Extensions Development Tutorial

3Use the programming language

that is mostsuited to the task at hand

Page 62: Mozilla Firefox Extensions Development Tutorial

・ JavaScript calls XPCOM components written in C++

・ C++ calls XPCOM components written in JavaScript

・ Java calls XPCOM components written in C++

...

Page 63: Mozilla Firefox Extensions Development Tutorial

Take advantageof programminglanguage traits

and divide tasks

Page 64: Mozilla Firefox Extensions Development Tutorial

Each componentis a black box

Page 65: Mozilla Firefox Extensions Development Tutorial

InFirefox

Page 66: Mozilla Firefox Extensions Development Tutorial

・ If speed is necessary

・ If the platform is directly accessed

Use C++

Page 67: Mozilla Firefox Extensions Development Tutorial

Development Complexity

Need to Compile

Platform dependency

Execution Speed

JavaScript Simple No Low Slow

C++ Complex Yes High Fast

Page 68: Mozilla Firefox Extensions Development Tutorial

JavaScriptand

XPCOM

Page 69: Mozilla Firefox Extensions Development Tutorial

Interoperate using

XPConnect

Page 70: Mozilla Firefox Extensions Development Tutorial

XPConnectAllows XPCOM to be accessed from JavaScript

Page 71: Mozilla Firefox Extensions Development Tutorial

Example:Create a temporary folder by calling XPCOM from JavaScript

Page 72: Mozilla Firefox Extensions Development Tutorial

const nsILocalFile = Components.interfaces.nsILocalFile;var file = Components.classes['@mozilla.org/file/local;1'] .createInstance(nsILocalFile);file.initWithPath('C:\\');file.append('temp');if (!file.exists()) { file.create(nsILocalFile.DIRECTORY_TYPE, 0755);}

Page 73: Mozilla Firefox Extensions Development Tutorial

Benefits

Page 74: Mozilla Firefox Extensions Development Tutorial

It iscross-platform

(This is it)

Page 75: Mozilla Firefox Extensions Development Tutorial

Summary

Application Logic

Presentation

Conditional tasks

Specialized tasks

Regular app

C++, etc.

C++, etc.

C++, etc. COM .NET Framework

Web app HTML CSS JavaScript Jscript

ActiveX CGI script

Firefox XUL CSS JavaScript XPCOM

Page 76: Mozilla Firefox Extensions Development Tutorial

Review

Page 77: Mozilla Firefox Extensions Development Tutorial

Role of each technology in Firefox

Defines presentation

Controls all parts

Builds architectural framework

Black box for specialized tasks

Page 78: Mozilla Firefox Extensions Development Tutorial
Page 79: Mozilla Firefox Extensions Development Tutorial

Compare tosimilar projects

Page 80: Mozilla Firefox Extensions Development Tutorial

Logic PresentationConditional

tasksSpecialized

tasks

Firefox XUL CSS JavaScript XPCOM

Adobe AIR HTML CSS JavaScript Flash

Page 81: Mozilla Firefox Extensions Development Tutorial

Not flashy but it is solid

Platform compatibility

Platform dependency

Capable of flashy

tasksStandard

Machine code High High High -

Java Low Low High Open

Flash/AIR Low Low High Closed

Silverlight ? Low High Closed

XUL Modestly high Low Slight Open

Page 82: Mozilla Firefox Extensions Development Tutorial
Page 83: Mozilla Firefox Extensions Development Tutorial

Issues withdeveloping XUL

based applications

Page 84: Mozilla Firefox Extensions Development Tutorial

There are no WYSIWYGdevelopment environments

Page 85: Mozilla Firefox Extensions Development Tutorial

Lack of documentation

(Source code is the documentation)

Page 86: Mozilla Firefox Extensions Development Tutorial

However

Page 87: Mozilla Firefox Extensions Development Tutorial

Only a text editoris needed fordevelopment

Page 88: Mozilla Firefox Extensions Development Tutorial

AgileApplication

Developmentwith XUL!!