Using OBJECT, EMBED and APPLET Tags in Java Plug-in


 

This chapter includes the following topics:

Introduction

This document explains the tagging structure, involving OBJECT and EMBED tags, required by Java Plug-in. It is intended for web authors who want to manually insert Java Plug-in tags in their HTML pages.

 

Notes

  1. There is a Java Plug-in HTML Converter, available free-of-charge from Sun Microsystems, that can automatically generate the tagging structure. It is highly recommended that most web authors use it.
  2. This converter can convert pages into any of the formats described below.
  3. For a complete list of JRE releases that can be autodownloaded via .cab files, as mentioned below, see Autodownload Files (Windows Only).

Applets are normally specified in an HTML file as follows:

<APPLET code="XYZApp.class" codebase="html/" align="baseline"
    width="200" height="200">
<PARAM name="model" value="models/HyaluronicAcid.xyz">
    No Java 2 SDK, Standard Edition v 1.4.2 support for APPLET!!
</APPLET>

And normally the APPLET tag specifies information about the applet, while the <PARAM> tags, located between the <APPLET> and </APPLET> tags, store per-instance applet information.

However, an APPLET is rendered by the browser and there is no easy way to interrupt the browser and force it to use Sun's Java Runtime Environment (JRE) to run the applet. To force the browser to do so, however, you may use a special Java Plug-in tagging structure—involving the OBJECT or EMBED tag or both, as described below—in place of the usual APPLET tag in an your HTML pages. This will cause the browser to launch Java Plug-in, which will then run the applet using Sun's JRE.

For various combinations of browsers and platforms, the following sections tell you exactly what you need to do

Note on Version Numbers

Product version numbers are of the form:

n1.n2.n3_n4n5

where n1.n2 is the major version number, the n3 is the minor version number (also referred to as the maintenance version number), and n4n5 is the patch version number (also referred to as the update version number).

The version numbers used in the examples below refer to the 1.4 major release with minor release number of 2 and, at times, hypothetical patch number of mn. Do not put hypothetical values into actual HTML for web pages.

Java Plug-in in IE on Windows

To use Java Plug-in in IE on Windows, use the OBJECT tag. The following is an example of mapping an APPLET tag to a Java Plug-in tag:

Original APPLET tag:

<APPLET code="XYZApp.class" codebase="html/" align="baseline"
    width="200" height="200">
<PARAM name="model" value="models/HyaluronicAcid.xyz">
    No Java 2 SDK, Standard Edition v 1.4.2 support for APPLET!!
</APPLET>

New OBJECT tag:

<OBJECT classid="clsid:CAFEEFAC-0014-0002-0000-ABCDEFFEDCBA"
    width="200" height="200" align="baseline" 
    codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i586.cab#Version=1,4,2,0">
    <PARAM name="code" value="XYZApp.class">
    <PARAM name="codebase" value="html/">
    <PARAM name="type" value="application/x-java-applet;jpi-version=1.4.2">
    <PARAM name="model" value="models/HyaluronicAcid.xyz">
    <PARAM name="scriptable" value="true">
        No Java 2 SDK, Standard Edition v 1.4.2 support for APPLET!!
</OBJECT>

Note

For static versioning, set codebase equal to:

http://java.sun.com/products/plugin/autodl/<.cab file for the version you want>

For example, for static versioning for the 1.4.2 release (which uses classid of clsid:CAFEEFAC-0014-0002-0000-ABCDEFFEDCBA), set codebase to:

http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-win.cab

For a complete list of JRE releases that can be autodownloaded via .cab files, see Autodownload Files (Windows Only).

For dynamic versioning (which uses classid of clsid:8AD9C840-044E-11D1-B3E9-00805F499D93), set codebase equal to:

http://java.sun.com/products/plugin/autodl/jinstall-<major version of family in underscore format>-windows-i586.cab#Version=<full version number for lowest version in family in comma-separated format>

If no version of Java is installed, or a version less than the major version of the family is installed, then this will cause automatic redirection to the latest .cab for the latest version in the family.

For example, for the 1.4.2 release you would set codebase as follows:

http://java.sun.com/products/plugin/autodl/jinstall-1_4-windows-i586.cab#Version=1,4,0,0

If the user had version 1.3.1 installed, then the latest version in the 1.4 family would be downloaded and installed. But if any version in the 1.4 family were installed, then it would be used and no download would take place.

Note that the autodownload .cab files can change as patch releases are released. See below for more about the interpretation of codebase.

Note that the OBJECT tag contains similar information to the APPLET tag. It is sufficient to launch Java Plug-in in IE. The classid in the OBJECT tag is the class identifier for Java Plug-in itself. When IE renders this class identifier in the OBJECT tag, it will try to load Java Plug-in into the browser.  See classid attribute below for information about versioning.

There are several attributes in the OBJECT tag, such as width, height and align, that are mapped directly from the corresponding attributes in the APPLET tag. These contain formatting information that IE will use to position Java Plug-in. Since this information is mapped directly without changes, the position and appearance of the applets using Java Plug-in should be the same as those applets using the APPLET tag. 

Not all attributes in the APPLET tag can be mapped to the OBJECT tag attributes. For example, the attributes code and codebase in the APPLET tag are not mapped into the OBJECT tag attribute. Instead, the attribute code is mapped into the PARAM code because, according to the w3c.org HTML specification, the attribute code does not exist in the OBJECT tag. There are other attributes that do not correspond in the OBJECT tag attributes. These attributes, with one exception, should be mapped to PARAM tags. 

Note

Duplicate parameter names should never be used with the OBJECT tag in Java Plug-in.

The one exception is the codebase attribute. In the APPLET tag, the codebase attribute represents the location from which to download additional class and jar files. However, in the OBJECT tag, the codebase attribute represents the location from which to download Java Plug-in when it is not found on the local machine. Because the codebase attribute has two different meanings in the APPLET and OBJECT tags, the codebase attribute in the APPLET tag is mapped into a PARAM codebase in the OBJECT tag to resolve the conflict. 

In the above example, the code and codebase attributes in the APPLET tag are mapped into the OBJECT tag parameters. The PARAM code identifies the applet, and its value should be the same as the code attribute in the APPLET tag. The PARAM codebase identifies the codebase of the applet. Java Plug-in knows where to download the applet or JavaBeans component because it can read this information from the parameters. The parameter type is not mapped from the APPLET tag, but it is required in the OBJECT tag. It identifies the type of the Java executable, such as an applet or a JavaBean, so that Java Plug-in knows how to initialize the Java executable. These three PARAM tags (code, codebase, and type) in the above example are specified for Java Plug-in. They do not exist in the PARAM of the original APPLET tag. Note that the model parameter within the OBJECT tag is identical to the model parameter inside the APPLET tag. Except for these first three parameters specified for Java Plug-in, the remainder of the parameters are the same as those inside the APPLET tag. 

A new addition for Java Plug-in 1.3 (and valid in 1.4.x) was the PARAM scriptable. This was added to improve performance of applets that do not require the use of JavaScript or VBScript. The value should be true if the applet requires scripting support and false if it does not. The value is false by default.

Please note that PARAM scriptable is not the same as the PARAM mayscript. mayscript provides support for communication from Java applets to JavaScript only, while scriptable allows communication from JavaScript to Java applets in Internet Explorer only.

The text "No Java 2 SDK, Standard Edition v 1.4.2 support for APPLET!!" in the APPLET tag is mapped inside the <OBJECT> and </OBJECT> tags. Originally, this text is displayed only if the browser does not have Java support. By mapping it inside the OBJECT tag, this text will be displayed if the browser does not support the OBJECT tag. 

The APPLET-to-OBJECT tag attributes mapping is as follows:

Attribute Name APPLET Tag Support OBJECT Tag Support Attribute Mapping to OBJECT Tag
align X X OBJECT attribute align
alt X    
archive X   PARAM element archive
code X X PARAM element code
codebase X X PARAM element codebase
height X X OBJECT attribute height
hspace X X OBJECT attribute hspace
name X X

OBJECT attribute name, PARAM element name

This case is an exception. The name attribute in the orginal APPLET element must be mapped both to the name attribute in the OBJECT element and to a nested PARAM. If the original applet were as follows:

<APPLET name="clock" ...>
</APPLET>

Then the mapping would be:

<OBJECT name="clock" ...>
<PARAM name="name" value="clock">
</OBJECT>

object X   PARAM element object
title X X OBJECT attribute title
vspace X X OBJECT attribute vspace
width X X OBJECT attribute width
mayscript X   PARAM element mayscript

Some OBJECT attributes and nested PARAM elements are special to the OBJECT tag. They are the following:

Attribute/PARAM Meaning in OBJECT tag
Attribute classid

It should always have the same value for dynamic version support, i.e. clsid:8AD9C840-044E-11D1-B3E9-00805F499D93. For static version support it will have a unique value for the version, e.g., clsid:CAFEEFAC-0014-0002-0000-ABCDEFFEDCBA.

For more information about static vs. dynamic versioning, see Encountering OBJECT, EMBED, and APPLET Tags With Different Plug-in Versions and Browsers.

Note: The example above uses static versioning.

Attribute codebase

It should be a full URL pointing to a .cab file somewhere on the network. It's purpose is to allow downloading and installation of Plug-in if either no version of Plug-in is installed on a user's computer or if no appropriate version of Plug-in is installed. The URL should, by default, point to a page on the Java Software website.

Examples:

In the above example, codebase is:

codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i586.cab#Version=1,4,2,0"

Note that this was for static versioning and that the version number appended to the .cab file indicates that 1.4.2 version of Plug-in needs to be installed on the user's computer, otherwise an attempt will be made to download and install it.

For dynamic versioning, codebase would be as follows:

codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4-windows-i586.cab#Version=1,4,0,0"

The appended version number indicates that if the user has version 1.4.0 or higher of the Plug-in installed on the computer, no download will occur. In other words, if the installed Plug-in is in the 1.4 family (major version 1.4), then it will run. If the installed version is lower, however, then an attempt will be made to download and install a newer version via the .cab file.

PARAM element type

The value for parameter type should be as follows:

"application/x-java-<object_type>;<version_type>=<implementation_version>"

where

object_type is applet or bean;

version_type is jpi-version for static versioning or version for dynamic versioning;

implementation_version is Implementation-Version as defined in Appendix 6: Sun-Supported Specification-Version and Implemenation-Version Formats.

For more information about static vs. dynamic versioning, see Encountering OBJECT, EMBED, and APPLET Tags With Different Plug-in Versions and Browsers.

Examples:

For an applet deployed for static versioning with Plug-in version 1.4.1 patch release 02, value for type would be as follows:

"application/x-java-applet;jpi-version=1.4.1_02"

For a bean deployed for dynamic versioning with Plug-in version 1.4.1 patch release 03, value for type would be:

"application/x-java-bean;version=1.4"

This is because for dynamic versioning only the major version number is checked; i.e., if the installed Plug-in is in the major version family, no download is required.

PARAM element codebase Specifies the base URL of the applet. The URL can be relative or absolute but it should be in the domain of the current document. This PARAM element is required only if the applet is not located in the same directory as the document.
PARAM element code Specifies the name of the Java applet or JavaBeans component. It cannot be used with PARAM element object nested inside the same OBJECT tag.
PARAM element scriptable Specifies whether the applet is scriptable from the HTML page using JavaScript or VBScript. The value can be either true or false. This attribute is new in Java Plug-in 1.4.
PARAM element object Specifies the name of the serialized Java applet or JavaBeans component. It cannot be used with PARAM element code nested inside the same OBJECT tag. This attribute is optional.
PARAM element archive Specifies the name of the Java archive. This attribute is optional.
PARAM element mayscript Specifies whether the applet is allowed to access netscape.javascript.JSObject. The value can be either true or false. This attribute is optional.

If the original APPLET element uses attributes type, codebase, code, object or archive, and also has nested PARAM element attributes type, codebase, code, object or archive, there will be a problem with the direct mapping of the APPELET attributes to PARAM attributes , as there will then be PARAM elements with duplicate name attributes, e.g.,

If the orginal applet were as follows:

<APPLET codebase = "a/b/c ...>
<PARAM name="codebase" value="my.jar">
</APPLET>

Then the direct mapping would be:

<OBJECT ...>
<PARAM name="codebase" value="a/b/c">
<PARAM name="codebase" value="my.jar">
</OBJECT>

To avoid this problem, any APPLET attribute that has a corresponding PARAM element in the orignal applet should be mapped as shown below.

Original attribute in the APPLET element New PARAM attribute with OBJECT element
code java_code
codebase java_codebase
archive java_archive
object java_object
type java_type

These new PARAM element attribute names should be used only when necessary. If both the new and original PARAM names exist in the same OBJECT tag, the values associated with the new PARAM element names are used by Java Plug-in to load the applet or JavaBean.

Example

Suppose the orginal applet was as follows:

<APPLET codebase = "a/b/c ...>
<PARAM name="codebase" value="my.jar">
</APPLET>

Then the mapping should be as shown below:

<OBJECT ...>
<PARAM name="java_codebase" value="a/b/c">
<PARAM name="codebase" value="my.jar">
</OBJECT>

Java Plug-in in Netscape Navigator on Windows or SolarisTM operating environments

To use Java Plug-in with Netscape Navigator 4.x on Windows or Solaris operating environments, you must use the EMBED tag. The following example shows the mapping of a traditional APPLET tag to a Java Plug-in EMBED tag:

Original APPLET tag:

<APPLET code="XYZApp.class" codebase="html/" align="baseline"
    width="200" height="200">
<PARAM name="model" value="models/HyaluronicAcid.xyz">
    No Java 2 SDK, Standard Edition v 1.4.1 support for APPLET!!
</APPLET>

New EMBED tag:

<EMBED type="application/x-java-applet;jpi-version=1.4.1" width="200"
   height="200" align="baseline" code="XYZApp.class"
   codebase="html/" model="models/HyaluronicAcid.xyz"
   pluginspage="http://java.sun.com/j2se/1.4.1/download.html">
<NOEMBED>
   No Java 2 SDK, Standard Edition v 1.4.1 support for APPLET!!
</NOEMBED>
</EMBED>

Note that the EMBED tag contains similar information to the APPLET tag.It is sufficient to launch Java Plug-in in Navigator. The attribute type in the EMBED tag is used to identify the type of the Java executable, such as an applet or a bean. When Navigator renders this attribute in the EMBED tag, it will try to load Java Plug-in into the browser. Note that a version number is also appended. It is used for comparing the version installed on a user's computer and deciding if another version needs to be installed. The second table below describes this in greater detail.

In the above example, several attributes in the EMBED tag, such as width, height and align, map directly from the corresponding attributes in the APPLET tag. These contain formatting information that Navigator uses to position Java Plug-in. Since this information is mapped directly without changes, the position and appearance of the applets using Java Plug-in should be the same as those applets using the APPLET tag. 

Unlike the OBJECT tag, all information must be stored inside the <EMBED> tag. No PARAM elements are used with the EMBED tag. Therefore, all APPLET attributes and related PARAM elements must be mapped as attribute name="value" pairs inside the EMBED tag. 

In the above example, the code and codebase attributes in the APPLET tag are mapped into the EMBED tag attributes. Attribute code identifies the applet. Its value should be the same as the code attribute in the APPLET tag. Attribute codebase identifies the codebase of the applet. Java Plug-in knows where to download the applet or JavaBeans component because it can read this information from the attributes. Also notice that the model attribute within the EMBED tag is mapped from the nested PARAM element model inside the APPLET tag. 

Like the codebase attribute in the OBJECT tag, attribute pluginspage in the EMBED tag is used by Navigator if Java Plug-in is not installed on the user's computer, or if the wrong version of Java Plug-in is installed. It should point to the Java Plug-in Download Page on the Java Software website; or, for intranet deployment, to a page on the intranet from which Java Plug-in may be downloaded.

The text "No Java 2 SDK, Standard Edition v 1.4.1 support for APPLET!!" in the APPLET tag is mapped inside the <NOEMBED> and </NOEMBED> tags. With the traditional APPLET tag this text is displayed only if the browser does not have internal support for Java. By mapping it inside the NOEMBED tag, this text will be displayed if the browser does not support the EMBED tag, or if Navigator fails to start the Java Plug-in. 

The APPLET-to-EMBED tag attributes mapping is as follows:

Attributes
APPLET tag support
EMBED tag support
Attribute map to EMBED tag

align

X X Attribute align
alt X X Attribute alt
archive X   Attribute archive
code X   Attribute code
codebase X   Attribute codebase
height X X Attribute height
hspace X X Attribute hspace
name X X Attribute name
object X   Attribute object
title X X Attribute title
vspace X X Attribute vspace
width X X Attribute width
mayscript X   Attribute mayscript

Some attributes are special to the EMBED tag. These attributes are:

Attribute
Meaning in EMBED tag
Attribute type

type should be as follows:

"application/x-java-<object_type>;<version_type>=<implementation_version>"

where

object_type is applet or bean;

version_type is jpi-version for static versioning or version for dynamic versioning;

implementation_version is Implementation-Version as defined in Appendix 6: Sun-Supported Specification-Version and Implemenation-Version Formats.

For more information about static vs. dynamic versioning, see Encountering OBJECT, EMBED, and APPLET Tags With Different Plug-in Versions and Browsers.

Examples:

For an applet deployed for static versioning with Plug-in version 1.4.1 patch release 02, type would be as follows:

"application/x-java-applet;jpi-version=1.4.1_02"

For a bean deployed for dynamic versioning with Plug-in version 1.4.1 patch release 03, type would be:

"application/x-java-bean;version=1.4"

This is because for dynamic versioning only the major version number is checked; i.e., if the installed Plug-in is in the major version family, no download is required).

Attribute codebase Specifies the base URL of the applet or JavaBeans component. The URL can be relative or absolute but it should be in the domain of the current document. This attribute is required only if the applet is not located in the same directory as the document.
Attribute code Specifies the name of the Java applet or JavaBeans component. It cannot be used with param object inside the same EMBED tag.
Attribute object Specifies the name of the serialized Java applet or JavaBeans component. It cannot be used with the code attribute inside the same EMBED tag. This attribute is optional.
Attribute archive Specifies the name of the Java archive. This attribute is optional.
Attribute pluginspage It should be a full URL pointing to an HTML page from which Java Plug-in can be downloaded. If there is no Plug-in installed on a user's computer, or if the version of the Plug-in is not the one specified via the the type attribute, then this page will be presented to the user.
Attribute mayscript Specifies whether the applet is allowed to access netscape.javascript.JSObject.  The value can be either true or false. This attribute is optional.

Similar to the case of the OBJECT tag, if the original APPLET tag has PARAM element type, codebase, code, object, or archive, mapping it to the EMBED tag attribute will cause a problem. To avoid this, Java Plug-in also supports the same new set of attribute names for the EMBED tag, as specified below:

Similar to the case of the OBJECT element, if the original APPLET element uses attributes type, codebase, code, object or archive, and also has nested PARAM element attributes type, codebase, code, object or archive, there will be a problem with the direct mapping of the APPELET attributes to EMBED attributes. To avoid this problem, Java Plug-in also supports the same new set of attribute names for the EMBED tag, as specified below:

Original Attribute Names
New Attribute Names
code java_code
codebase java_codebase
archive java_archive
object java_object
type java_type

These new attribute names should be used only when necessary. If both new and original attribute names exist in the same EMBED tag, the value associated with the new attribute name is used by Java Plug-in to load the applet or bean.

Java Plug-in in IE and Navigator

The new OBJECT element scheme described above allows a web page with an applet to use Java Plug-in with Internet Explorer, and the new EMBED element scheme allows a web page with an applet to use Java Plug-in with Netscape. However, changes are a web page will be browsed by both browsers. Hence, there needs to be a way to use the OBJECT scheme when a page is browser by Internet Explorer, and the EMBED scheme when the page is browsed by Netscape. Such a scheme is described below.

Original APPLET element:

<APPLET code="XYZApp.class" codebase="html/" align="baseline"
    width="200" height="200">
<PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
    No Java 2 SDK, Standard Editoin v 1.4 support for APPLET!!
</APPLET>

New OBJECT element with nested EMBED element:

<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
    width="200" height="200" align="baseline"
    codebase="http://java.sun.com/products/plugin/1.4/jinstall-14-win32.cab#Version=1,4,0,mn">
    <PARAM NAME="code" VALUE="XYZApp.class">
    <PARAM NAME="codebase" VALUE="html/">
    <PARAM NAME="type" VALUE="application/x-java-applet;jpi-version=1.4">
    <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
    <PARAM NAME="scriptable" VALUE="true">
    <COMMENT>
        <EMBED type="application/x-java-applet;jpi-version=1.4" width="200"
           height="200" align="baseline" code="XYZApp.class" 
           codebase="html/" model="models/HyaluronicAcid.xyz"
           pluginspage="http://java.sun.com/products/plugin/1.4/plugin-install.html">
            <NOEMBED>
                No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
            </NOEMBED>
        </EMBED>
    </COMMENT>
</OBJECT>

Because IE understands the <OBJECT> tag, it will try to launch Java Plug-in. Notice that the <COMMENT> tag is a special HTML tag understood only by IE. IE ignores text between the <COMMENT> and </COMMENT> tags. In effect, the above tags actually become:

Note that the <COMMENT> element is unique to IE. IE ignores text between the <COMMENT> and </COMMENT> elements. For IE, then, the above structure of elements looks like this:

<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
    width="200" height="200" align="baseline"
    codebase="http://java.sun.com/products/plugin/1.4/jinstall-14-win32.cab#Version=1,4,0,mn">
    <PARAM NAME="code" VALUE="XYZApp.class">
    <PARAM NAME="codebase" VALUE="html/">
    <PARAM NAME="type" VALUE="application/x-java-applet;jpi-version=1.4">
    <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
    <PARAM NAME="scriptable" VALUE="true">
</OBJECT>

This is identical to the new OBJECT tag example described above.

Now because Navigator understands neither the OBJECT nor the COMMENT elements, Navigator 4 views the above structure as follows:

<EMBED type="application/x-java-applet;jpi-version=1.4" width="200"
   height="200" align="baseline" code="XYZApp.class" 
   codebase="html/" model="models/HyaluronicAcid.xyz"
   pluginspage="http://java.sun.com/products/plugin/1.4/plugin-install.html">
    <NOEMBED>
        No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
    </NOEMBED>
</EMBED>

This is identical to the new EMBED element example described above.

Thus you can use the new element structure—OBJECT element with nested EMBED element—to invoke Java Plug-in when either IE or Netcape encounters a page with an applet. The is the recommeded format to use.

Java Plug-in Anywhere

Warning!

The material in this section is out of date. It will be updated in the future. The description of the script below corresponds to the Extended option with the HtmlConverter. It is recommended that you do not use this option at this time. The Standard option is the recommended option.

In most environments, Internet or intranet, an HTML page is likely to be viewed on different browsers on different platforms. Ideally, then, you should activate Java Plug-in only on the right browser-platform combination. Otherwise, an applet should use the browser's default JVM. You can achieve this using the following Java Plug-in format:

Original APPLET element:

<APPLET code="XYZApp.class" codebase="html/" align="baseline"
    width="200" height="200">
<PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
    No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
</APPLET>

New-style format:

The following is an example of an equivalent Java Plug-in format. (The example includes comments.)

<!-- The following code is specified at the beginning of the <BODY> tag. -->
<SCRIPT LANGUAGE="JavaScript"><!--
    var _info = navigator.userAgent; 
    var _ns = false;
    var _ie = (_info.indexOf("MSIE") > 0 && _info.indexOf("Win") > 0
        && _info.indexOf("Windows 3.1") < 0);
//--></SCRIPT>
<COMMENT><SCRIPT LANGUAGE="JavaScript1.1"><!--
    var _ns = (navigator.appName.indexOf("Netscape") >= 0
        && ((_info.indexOf("Win") > 0 && _info.indexOf("Win16") < 0
        && java.lang.System.getProperty("os.version").indexOf("3.5") < 0)
        || _info.indexOf("Sun") > 0));
//--></SCRIPT></COMMENT>


<!-- The following code is repeated for each APPLET tag -->
<SCRIPT LANGUAGE="JavaScript"><!--
    if (_ie == true) document.writeln('
<OBJECT
    classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
    width="200" height="200" align="baseline"
codebase="http://java.sun.com/products/plugin/1.4/jinstall-14-win32.cab#Version=1,4,0,mn">
    <NOEMBED><XMP>');
    else if (_ns == true) document.writeln('
<EMBED
    type="application/x-java-applet;jpi-version=1.4" width="200" height="200"
    align="baseline" code="XYZApp.class" codebase="html/"
    model="models/HyaluronicAcid.xyz"
    pluginspage="http://java.sun.com/products/plugin/1.4/plugin-install.html">
    <NOEMBED><XMP>');
//--></SCRIPT>
   <APPLET code="XYZApp.class" codebase="html/" align="baseline"
        width="200" height="200">
</XMP>
    <PARAM NAME="java_code" VALUE="XYZApp.class">
    <PARAM NAME="java_codebase" VALUE="html/">
    <PARAM NAME="java_type" VALUE="application/x-java-applet;jpi-version=1.4">
    <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
    <PARAM NAME="scriptable" VALUE="true">
    No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
</APPLET></NOEMBED></EMBED>
</OBJECT>

<!--
    <APPLET code="XYZApp.class" codebase="html/" align="baseline"
        width="200" height="200">
    <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
    No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
    </APPLET>
-->

Although this tag seems complicated compared to the old APPLET tag, it is not. Most of the Java Plug-in tag is the same regardless of the applet used. For the majority of cases, a webmaster can copy and paste the Java Plug-in tag. 

The first block of the script extracts the browser and platform. You must determine the browser and platform on which the applet is running. You do this by using JavaScriptTM to extract first the browser name, then the platform. This is done once per HTML document.

The second block of the script replaces the APPLET tag. You must replace each APPLET tag with a similar block of code. The script replaces the APPLET tag with either an EMBED tag or OBJECT tag, depending on the browser. You use the OBJECT tag for IE and the EMBED tag for Netscape Navigator. Finally, the original APPLET tag is included as a comment at the end. It is always a good idea to keep the original APPLET tag in case you want to remove the Java Plug-in invocation. 

The first JavaScript establishes the browser and the platform on which the browser is running. You must do this because, currently, Java Plug-in supports only Windows 95, Windows 98, Windows NT 4.0, and Solaris. Note that Windows NT 3.51 is the only Win32 platform that Java Plug-in does not support. Java Plug-in should be invoked only on the supported browser and platform. The script sets the variable _ie to true if the browser is Internet Explorer. It sets the variable _ns to true if the browser is Navigator. (Note that all variable names in the JavaScript start with "_". This is done to avoid conflicting with other JavaScript variables in the same page.) 

To detect the right browser, the JavaScript evaluates three strings that are within the JavaScript's Navigator object: userAgent, appVersion, and appName. These strings contain information about the browser and the platform. By looking at some examples of the string userAgent, you can see how to evaluate userAgent and use it to determine the browser. The following are some examples of the userAgent string for different platforms as it appears in Internet Explorer. 

Platform and Browser JavaScript's Navigator.userAgent string
Windows 2000 w/IE 5.0 "Mozilla/4.0 (compatible; MSIE 5.01; Window NT5.0)
Windows NT 4.0 w/IE 4.0 "Mozilla/4.0 (compatible; MSIE 4.0; Windows NT)" 
Windows NT 4.0 w/IE 3.02 "Mozilla/2.0 (compatible; MSIE 3.02; Windows NT)" 
Windows 95 w/IE 4.0 "Mozilla/4.0 (compatible; MSIE 4.0; Windows 95)"
Windows 95 w/IE 3.02 "Mozilla/2.0 (compatible; MSIE 3.02; Windows 95)"
Windows NT 3.51 w/IE 4.0 "Mozilla/4.0 (compatible; MSIE 4.0; Windows 3.1)"
Windows 3.1 w/IE 4.0 "Mozilla/4.0 (compatible; MSIE 4.0; Windows 3.1)"
Windows NT 4.0 w/Navigator 4.04 "Mozilla/4.04 [en] (WinNT; I)"
Windows NT 4.0 w/Navigator 3.04 "Mozilla/3.04 (WinNT; I)"
Windows NT 3.51 w/Navigator 4.04  "Mozilla/4.04 [en] (WinNT; I)"
Windows NT 3.51 w/Navigator 3.04  "Mozilla/3.04 (WinNT; I)"
Windows 95 w/Navigator 4.03 "Mozilla/4.03 [en] (Win95; I)"
Windows 95 w/Navigator 3.03 "Mozilla/3.03 (Win95; I)"
Solaris 2.6 w/Navigator 4.02 "Mozilla/4.02 [en] (X11; l; SunOS 5.6 sun4u)

Note that in each case the substring "MSIE" is always in the userAgent string in Internet Explorer. Also, the userAgent string in IE under Windows 3.1 and Windows 3.51 would contain the substring "Windows 3.1" because IE in these platforms is 16-bit. While IE 4 is also available on Solaris and Mac, in these versions the userAgent string does not contain the substring "Win". In addition, IE on Windows CE does not support JavaScript. This can be summarized as follows: 

userAgent string / Browsers Windows 3.1 w/ IE 3/4 Windows NT 3.51 w/ IE 3/4 Windows 95 w/ IE 3/4 Windows NT 4.0 w/ IE 3/4 Windows CE w/ IE Mac w/ IE UNIX w/ IE Other browsers on any platform
contains "MSIE" X X X X   X X  
contains "Win" X X X X        
does not contain "Windows 3.1"     X X   X X X

The above table shows that only Windows 95 and Windows NT 4.0 with IE can pass the Java Plug-in browser and platform requirements. However, this logic makes no assumptions about future releases of IE or future releases of Windows with IE. As long as the userAgent string contains "MSIE" and "Win", the above code should work in future releases of IE on Win32. 

The above logic summarizes into the following: 

<SCRIPT LANGUAGE="JavaScript"><!--
    var _info = navigator.userAgent;
    var _ie = (_info.indexOf("MSIE") > 0 && _info.indexOf("Win") > 0
            && _info.indexOf("Windows 3.1") < 0);
//--></SCRIPT>

It is harder to detect Navigator on the right platform. Using just JavaScript, there is no way to determine if the browser is running on the Windows NT 3.51 or Windows NT 4.0 operating platform. (Refer to the above table and examine the userAgent string. Notice that the userAgent strings in Windows NT 3.51 and Windows NT 4.0 operating platforms are the same in Navigator.) It is important to make this distinction because Java Plug-in supports only the Windows NT 4.0 operating platform. To run Java Plug-in on the right platform, you must use LiveConnect in Navigator to determine the OS version number. This can be summarized as follows: 

Testing logic / Browsers Windows 3.1 w/ NS 3/4 Windows NT 3.51 w/ NS 3/4 Windows 95 w/ NS 3/4 Windows NT 4.0 w/ NS 3/4 NS on Solaris IE on Solaris NS on other platform IE on other platform Other browsers on any platform
appName contains "Netscape" X X X X X   X    
userAgent contains "Win" X X X X       X  
userAgent does not contain "Win16"   X X X     X X  
os.version does not contain 3.5 X   X X     Depends on OS    
userAgent contains "Sun"         X X      

The above logic translates into the following code: 

<SCRIPT LANGUAGE="JavaScript"><!--
    var _info = navigator.userAgent; var _ns = false;
//--></SCRIPT>
<COMMENT><SCRIPT LANGUAGE="JavaScript1.1"><!--
     var _ns = (navigator.appName.indexOf("Netscape") >= 0
            && ((_info.indexOf("Win") > 0  && _info.indexOf("Win16") < 0
            && java.lang.System.getProperty("os.version").indexOf("3.5") < 0)
            || _info.indexOf("Sun") > 0));
//--></SCRIPT></COMMENT>

Referring to the previous table, note that only Windows 95, Windows NT 4.0, and Solaris operating environments with Navigator pass all the tests. Because LiveConnect is used to get the OS version number and only Navigator supports LiveConnect, a JavaScript that accesses LiveConnect will not be understood by IE. To prevent this from causing a problem, you block out this piece of the script using the COMMENT tag since COMMENT is an IE-specific comment tag. The text between the COMMENT tag is ignored by IE but not by Navigator. In addition, you must specify the script language as JavaScript1.1 to block this out if the browser is Navigator 2. 

At this point, the above logic for IE and Navigator summarizes to a script that should look as follows: 

<!-- The following code is specified at the beginning of the <BODY> tag. -->
<SCRIPT LANGUAGE="JavaScript"><!--
    var _info = navigator.userAgent; var _ns = false;
    var _ie = (_info.indexOf("MSIE") > 0 && _info.indexOf("Win") > 0
            && _info.indexOf("Windows 3.1") < 0);
//--></SCRIPT>
<COMMENT><SCRIPT LANGUAGE="JavaScript1.1"><!--
    var _ns = (navigator.appName.indexOf("Netscape") >= 0
           && ((_info.indexOf("Win") > 0 && _info.indexOf("Win16") < 0
           && java.lang.System.getProperty("os.version").indexOf("3.5") < 0)
           || _info.indexOf("Sun") > 0));
//--></SCRIPT></COMMENT> 

Remember that this block of JavaScript should be put at the top of the <BODY> of the HTML file. It is put at the top so that other JavaScripts can reference the variables _ie and _ns. This JavaScript is the same in all HTML files, and it is only needed once for each HTML body. 

The second block of HTML tags are actually the corresponding OBJECT and EMBED tags that are mapped from the data in the APPLET tag. Note that JavaScript outputs the OBJECT tag when the browser is IE running on the Windows 95, Windows 98 or Windows NT 4.0 operating environments. If the browser is Navigator 3/4 on Windows 95, Windows 98, Windows NT 4.0, or Solaris operating environments, then JavaScript also outputs the EMBED tag, though with a slightly different syntax. Recall that the mechanism for detecting the browser and the platform has been described in the above section. (Tags <!-- and --> are used for comments in HTML.) 

Original APPLET tag:

<APPLET code="XYZApp.class" codebase="html/" align="baseline"
    width="200" height="200">
<PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
    No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
</APPLET>

New style tag: 

<SCRIPT LANGUAGE="JavaScript"><!--
    if (_ie == true) document.writeln('<OBJECT
    classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
    width="200" height="200" align="baseline"
codebase="http://java.sun.com/products/plugin/1.4/jinstall-14-win32.cab#Version=1,4,0,mn">
    <NOEMBED><XMP>');
    else if (_ns == true) document.writeln('<EMBED
    type="application/x-java-applet;jpi-version=1.4" width="200" height="200"
    align="baseline" code="XYZApp.class" codebase="html/"
    model="models/HyaluronicAcid.xyz"
    pluginspage="http://java.sun.com/products/plugin/1.4/plugin-install.html">
    <NOEMBED><XMP>');
//--></SCRIPT>
    <APPLET code="XYZApp.class" codebase="html/" align="baseline"
        width="200" height="200"></XMP>
    <PARAM NAME="java_code" VALUE="XYZApp.class">
    <PARAM NAME="java_codebase" VALUE="html/">
    <PARAM NAME="java_type" VALUE="application/x-java-applet;jpi-version=1.4">
    <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">LUE="models/HyaluronicAcid.xyz">
    <PARAM NAME="scriptable" VALUE="true">
        No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
    </APPLET></NOEMBED></EMBED></OBJECT> 

Note that the original APPLET tag is also mapped in the new Java Plug-in tag. This is done because Java Plug-in is intended to be used only on supported platforms. Leaving the APPLET tag in the script ensures that browsers that do not support Java Plug-in, or browsers that do not support JavaScript can gracefully handle the applet using the default JVM. HotJava Browser, IE, and Navigator on non-Java Plug-in supported platforms, or browsers without JavaScript support, read the above tags as follows: 

<APPLET code="XYZApp.class" codebase="html/" align="baseline"
    width="200" height="200"></XMP>
<PARAM NAME="java_code" VALUE="XYZApp.class">
<PARAM NAME="java_codebase" VALUE="html/">
<PARAM NAME="java_type" VALUE="application/x-java-applet;jpi-version=1.4">
<PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
<PARAM NAME="scriptable" VALUE="true">
   No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
</APPLET></NOEMBED></EMBED></OBJECT> 

These browsers ignore the tags </XMP>, </OBJECT>, </EMBED>, and </NOEMBED> as well because there is no corresponding <XMP>, <OBJECT>, <EMBED>, and <NOEMBED> tags. Because Java Plug-in is targeted for features in the Java 2 SDK, Standard Edition v 1.4 or future releases, those browsers without full Java 2 SDK 1.4 support and who do not support Java Plug-in will display the message "No Java 2 SDK, Standard Edition v 1.4 support for APPLET". 

Unlike the previous examples, the mapped PARAM names contain java_code, java_codebase, and java_type instead of code, codebase, and type. This is necessary because specifying code and codebase in the <PARAM> inside the <APPLET> and </APPLET> tag causes problems in some browsers. 

IE on Windows reads the tags as follows: 

<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
    width="200" height="200" align="baseline"
codebase="http://java.sun.com/products/plugin/1.4/jinstall-14-win32.cab#Version=1,4,0,mn">
    <NOEMBED><XMP>
    <APPLET code="XYZApp.class" codebase="html/" align="baseline"
        width="200" height="200"></XMP>
    <PARAM NAME="java_code" VALUE="XYZApp.class">
    <PARAM NAME="java_codebase" VALUE="html/">
    <PARAM NAME="java_type" VALUE="application/x-java-applet;jpi-version=1.4">
    <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
    <PARAM NAME="scriptable" VALUE="true">
        No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
    </APPLET></NOEMBED></EMBED>
</OBJECT> 

Be careful when you use the <XMP> tag. Because IE renders the <OBJECT> tag, you must disable the <APPLET> tag. If not disabled, two applets will simultaneously show up in the browser—one applet will be running in Microsoft's JVM, and the other will be running in Sun's JVM using Java Plug-in. The <XMP> tag provides a solution. The <XMP> and </XMP> tags basically transform any HTML tag that occurs between them into a stream of static text. In the above example, the <XMP> and </XMP> tags cause the browser to treat the <APPLET> tag as static text instead of an HTML tag. Because the browser ignores any static text between the <OBJECT> tag and the <PARAM> tag, the above tags actually become: 

<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
    width="200" height="200" align="baseline"
codebase="http://java.sun.com/products/plugin/1.4/jinstall-14-win32.cab#Version=1,4,0,mn">
    <PARAM NAME="java_code" VALUE="XYZApp.class">
    <PARAM NAME="java_codebase" VALUE="html/">
    <PARAM NAME="java_type" VALUE="application/x-java-applet;jpi-version=1.4">
    <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
    <PARAM NAME="scriptable" VALUE="true">
        No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
</OBJECT> 

This is identical to the OBJECT tag example outlined above. Note that the <OBJECT> tag ignores the <NOEMBED>, </NOEMBED>, and </EMBED> tags. 

Navigator on Windows operating environments reads tags as follows: 

<EMBED type="application/x-java-applet;jpi-version=1.4" width="200" height="200"
    align="baseline" code="XYZApp.class" codebase="html/"
    model="models/HyaluronicAcid.xyz"
    pluginspage="http://java.sun.com/products/plugin/1.4/plugin-install.html">
<NOEMBED><XMP>
    <APPLET code="XYZApp.class" codebase="html/" align="baseline"
        width="200" height="200"></XMP>
    <PARAM NAME="java_code" VALUE="XYZApp.class">
    <PARAM NAME="java_codebase" VALUE="html/">
    <PARAM NAME="java_type" VALUE="application/x-java-applet;jpi-version=1.4">
    <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
    <PARAM NAME="scriptable" VALUE="true">
        No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
    </APPLET></NOEMBED></EMBED></OBJECT>

Note that the <XMP> tag is used again in the <EMBED> tag to also disable the <APPLET> tag. The <EMBED> tag ignores the <PARAM> and </OBJECT> tags as well. In effect, the above tags actually become: 

<EMBED type="application/x-java-applet;jpi-version=1.4" width="200" height="200"
    align="baseline" code="XYZApp.class" codebase="html/"
    model="models/HyaluronicAcid.xyz"
    pluginspage="http://java.sun.com/products/plugin/1.4/plugin-install.html">
<NOEMBED>
        No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
</NOEMBED>
</EMBED> 

This is identical to the EMBED tag example outlined above. 

You can use the combined OBJECT-EMBED-JavaScript tag to activate Java Plug-in in the right browser on the right platform. This combined tag is complicated and it should be used only if your HTML page is browsed by users in a heterogenous environment. 

Summary

This document describes the OBJECT tag and EMBED tag styles used by Java Plug-in. It focuses on the conversion from an APPLET tag to the OBJECT and EMBED tags. Currently, HTML 4.0 suggests that the OBJECT tag is the best way to insert Java applets and JavaBeans components into a HTML page. This document will be updated in the near future should there be a need to convert the OBJECT tag to the Java Plug-in tag style. Information disclosed in this document is intended to assist ISVs for writing HTML migration tools and to assist webmasters with Java Plug-in migration. The tag style described in this document is subject to change in the future. 

Note that the use of Java Plug-in is not limited to the tag styles described in this document. In fact, webmasters are encouraged to modify the tag style or mix the tag with JavaScript to fit their needs. As long as the described OBJECT tag is used in IE and EMBED tag is used in Navigator, there should be no problems running Java Plug-in. Currently, there are several conversion templates shipped with the Java Plug-in HTML converter. Webmasters may find one template better than others for their needs, and are encouraged to modify these templates themselves if necessary.