About the project
=================
The goal is to provide access to the DOM API provided
by the mozilla browser using the java to xpcom bridge(Blackconnect).
The implementation currently consists of stubs between mozilla core DOM
interfaces and core DOM interfaces defined in dom.idl (blackconnect
requires scriptable interfaces), java interfaces generated from
dom.idl and a DOMAccessor as an example of using the DOM API.
Sources
=======
The sources are located in mozilla/java/dom
Subdirectories
classes - contains classes generated automatically from
idl definition of core DOM interfaces (stubs/dom.idl)
using xpidl compiler (mozilla/java/xpcom/java/xpidl)
and a sample DOMTreeDumper class that dumps an html
document source using its DOM tree.
stubs - stubs between mozilla core DOM interfaces and
core DOM interfaces defined in dom.idl
accessor - a sample java component which demonstrates the
use of the DOM API from java via blackconnect
Building
========
Requirenments:
--------------
- you need to build the blackconnect bridge
mozilla/java/xpcom and to have all the
environment variables set required for
building blackconnect
- mozilla_Netscape_20000922_BRANCH mozilla build
- JDK1.3
- Perl 5 must be in your path
- JDKHOME environment variable set to your JDK dir
- CLASSPATH environment variable set to contain
mozilla/dist/classes directory and
org.w3c.dom.DOMException class. The source can be found at
http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/java-binding.html
Solaris and Linux:
------------------
goto mozilla/java/dom directory and type "gmake"
Windows NT:
-----------
goto mozilla/java/dom directory and type "nmake /f makefile.win"
Running
=======
After building a component run a mozilla browser. The document
sources will be dumped into console.
Using the Java DOM API
======================
Directory accessor contains a sample java component which
becomes a document load listener and dumps sources of documents
being displayed in mozilla using their DOM trees.
if you have a C++ pointer to any core DOM mozilla interface nsIDOM<...>
you need to wrap it into a corresponding scriptable stub interface
bc<...> (e.g. nsIDOMDocument into bcDocument using
bcDocument::bcDocument(nsIDOMDocument* ptr) constructor) and you
can use it to pass to java as a class instance which implements
a org.mozill.dom.Document interface using blackconnect.
An example works this way:
A C++ implementation of a component gets a call via NSGetModule method,
registrates itself as a document load listener, gets a reference to
a java component and then pass references to all documents being
displayed into a java component.
Notes:
- Since exception passing mechanism is not yet implemented in blackconnect
no DOMExceptions are raised.
- The mechanism used in a sample allows to modify any documents in any
way provided by the DOM API, so there are no security restrictions at all.