Qt-based LiveConnect Plugins

# Qt-based LiveConnect Plugins for Netscape and Explorer

The Qt-based Netscape Plugin software makes it easy to write plugins such that they can be used on both Unix/Linux and Windows/95/NT, in the Netscape and MS-Explorer, and any other WWW browser supporting the same protocol.

## How-to

1. Download the Plugin SDK from Netscape, and copy the following files from there to `$QTDIR/extensions/nsplugin/src` :
   - common/npwin.cpp
   - common/npunix.c
   - include/npapi.h
   - include/npupp.h
   - include/jri.h
   - include/jri_md.h
   - include/jritypes.h
2. Build the Netscape Plugin extension library, found in the `extensions/nsplugin/src` directory of your Qt distribution. This produces a static library to be linked with your plugin code.
3. Read the NSPlugin components in the class documentation.
4. Examine the example plugins:
   - Trivial example
   - Image example
   - Graphing example
5. Do most of your development as a stand-alone Qt application - debugging Netscape Plugins is cumbersome. You may want to use `signal(2)` in your plugin to enable core-dumps if your browser disables them.
6. Note the platform-specific build steps below.
7. Read about the raw plugin interface in Netscape's handbook.
8. If files viewed by a plugin are provided by an HTTP server (using a `http://...` URL) then the server must be configured to send the correct MIME type for the file, such as by editing the `mime.types` file of Apache. If the files are viewed via a `file://...` URL, then the browser will use the filename extension to decide the file type (and hence the plugin to load) - the user may need to set the filename extension in the Helpers or Applications section of their browser preferences.

We are working on streamlining the build process for Qt-based Netscape Plugins.

### Building under X11

- The Makefiles in the examples are appropriate for UNIX/X11.
- The user must install the resulting Shared Object in the Plugins directory of the browser.

### Building under Windows

- Qt needs to be built as a static library when building Netscape plugins, we are looking into the problem of making it work with Qt as a dynamic library.
- Plugins must be named `np`name`.dll`, or the browser will ignore them.
- The link step must include:
  - `/def:` name`.def`
  - `/dll`
  - a compiled resource file defining the file/MIME types accepted by the plugin.
- The user must install the resulting DLL in the Plugins directory of the browser.

## Known Bugs

The Qt-based LiveConnect Plugin binding code has a number of minor bugs, but is sufficiently stable for most production applications. All of these have known solutions which we are working to implement.

- MSIE 4.0 support is poor.
- Crashes on X11 if window is closed via window manager.
- Keyboard problems on Windows.