Solaris Java Plug-in User's Guide

Chapter 3 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.


Note –

There is a Java Plug-in HTML Converter, available free-of-charge from Sun Microsystems, that automatically does this for you. It is highly recommended that most web authors use it.


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

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 update version number.

The version numbers used in the examples below refer to the 1.4 major release with minor release number of 0 and, at times, hypothetical update number.

At times you will see modified usages such as 1,4,0,nm and 14 (the latter to indicate only the major version number).


Java Plug-in in Internet Explorer on Microsoft Windows Platforms

To use Java Plug-in with Internet Explorer on Microsoft Windows platforms, 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 support for APPLET!!
       </APPLET>

Note –

The URL given in the codebase attribute in this and following examples is for illustrative purposes only. No cab file actually exists at that URL.


New OBJECT Tag


<OBJECT classid="clsid:CAFEEFAC-0014-0000-0000-ABCDEFFEDCBA"
width="200" height="200" align="baseline" 
codebase="http://java.sun.com/jpi/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">
		No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
       </OBJECT>

Note that the OBJECT tag contains similar information to the APPLET tag. It is sufficient to launch Java Plug-in in Internet Explorer. The classid in the OBJECT tag is the class identifier for Java Plug-in itself. This class identifier should be the same in every HTML page. When Internet Explorer renders this class identifier in the OBJECT tag, it will try to load Java Plug-in into the browser.

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 Internet Explorer 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 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.


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, you must resolve this conflict by mapping this attribute into a PARAM codebase in the OBJECT tag.

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 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, so Java Plug-in knows how to initialize the Java executable. These three PARAM tags (code, codebase, and type) in the above example are specified by 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) was the PARAM scriptable tag. 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 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 displayed if the browser does not support the OBJECT tag.

The APPLET-OBJECT tag attributes mapping is as follows:

Attributes 

APPLET tag support 

OBJECT tag support 

Attribute map in OBJECT tag 

ALIGN 

Attribute ALIGN 

ALT 

 

 

ARCHIVE 

 

Param archive 

CODE 

Param code 

CODEBASE 

Param codebase 

HEIGHT 

Attribute HEIGHT 

HSPACE 

Attribute HSPACE 

NAME 

Attribute NAME, Param NAME 

OBJECT 

 

Param object 

TITLE 

Attribute TITLE 

VSPACE 

Attribute VSPACE 

WIDTH 

Attribute WIDTH 

MAYSCRIPT 

Param MAYSCRIPT 

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

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-0000-0000-ABCDEFFEDCBA.  

Note: The examples in this section use the dynamic version.

Attribute CODEBASE 

It should be a full URL pointing to a CAB file somewhere on the network. It should, be default, point to the binary on the Java Software web site. 

Param type 

If it is a Java applet, the value should be “application/x-java-applet;jpi-version=1.4” or “application/x-java-applet”. If it is a JavaBeans component, the value should be “application/x-java-bean;jpi-version=1.4” or “application/x-java-bean”. 

Param codebase 

Specifies the base URL of the applet. This attribute is optional. 

Param code 

Specifies the name of the Java applet or JavaBeans component. It cannot be used the param object inside the same OBJECT tag.

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

Specifies the name of the serialized Java applet or JavaBeans component. It cannot be used with param code inside the same OBJECT tag. This attribute is optional.

Param archive 

Specifies the name of the Java archive. This attribute is optional. 

Param mayscript 

Specifies whether the applet is allowed to access netscape.javascript.JSObject. The value can be either true or false. This attribute is optional.

Note that if the original APPLET tag has PARAM type, codebase, code, object or archive, mapping it to the OBJECT tag will cause a problem because duplicate param names will occur. To avoid this, Java Plug-in also supports another set of param names, as follows:

Original Param Names 

New Param Names 

code 

java_code 

codebase 

java_codebase 

archive 

java_archive 

object 

java_object 

type 

java_type 

You should use these new param names only when necessary. If both the new and original param names exist in the same OBJECT tag, the value associated with the new param name is always used by Java Plug-in to load the applet or JavaBean.

Java Plug-in in Netscape Navigator on Microsoft Windows and Linux Platforms or SolarisTM operating environments

To use Java Plug-in in Netscape NavigatorTM 4 browsers on Microsoft Windows and Linux platforms or SolarisTM operating environments, use the EMBED tag. The following example maps an 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 support for APPLET!!
</APPLET>

New EMBED tag:


<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/jpi/plugin-install.html">
<NOEMBED>
No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
</NOEMBED>
</EMBED>

Note that the EMBED tag contains similar information to the APPLET tag, and it is sufficient to launch Java Plug-in in Netscape Navigator browsers. The attribute type in the EMBED tag is used for identifying the type of the Java programming language executable, such as an applet or a bean. When a Netscape Navigator browser renders this attribute in the EMBED tag, it will try to load Java Plug-in into the browser. By specifying the type attribute, Java Plug-in will know how to initialize the Java programming language executable.

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 a Netscape Navigator browser 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 instead of using PARAM. Therefore, all attributes and params in the APPLET tag must be mapped as attribute-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 model param inside the APPLET tag.

Like the codebase attribute in the OBJECT tag, attribute pluginspage in the EMBED tag is used by Netscape Navigator browsers if Java Plug-in is not installed. It should always point to the Java Plug-in Download Page on the Java Software web site.

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

The APPLET-EMBED tag attributes mapping is as follows:

Attributes 

APPLET tag support 

EMBED tag support 

Attribute map in EMBED tag 

ALIGN 

Attribute ALIGN 

ALT 

Attribute ALT 

ARCHIVE 

 

Attribute archive 

CODE 

 

Attribute code 

CODEBASE 

 

Attribute codebase 

HEIGHT 

Attribute HEIGHT 

HSPACE 

Attribute HSPACE 

NAME 

Attribute NAME 

OBJECT 

 

Attribute object 

TITLE 

Attribute TITLE 

VSPACE 

Attribute VSPACE 

WIDTH 

Attribute WIDTH 

MAYSCRIPT 

Attribute MAYSCRIPT 

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

Attribute 

Meaning in EMBED tag 

Attribute type 

If it is an applet, the value should be "application/x-java-applet;jpi-version=1.4" or "application/x-java-applet". If it is a bean, the value should be "application/x-java-bean;jpi-version=1.4" or "application/x-java-bean". 

Attribute codebase 

Specifies the base URL of the applet. This attribute is optional. 

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 param code 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 somewhere on the network. 

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 OBJECT tag case, if the original APPLET tag has PARAM 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, as follows:

Original Attribute Names 

New Attribute Names 

code 

java_code 

codebase 

java_codebase 

archive 

java_archive 

object 

java_object 

type 

java_type 

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

Java Plug-in in Internet Explorer and Netscape Navigator Browsers

The OBJECT tag in Internet Explorer and the EMBED tag in Netscape Navigator browsers allows your HTML page to use Java Plug-in if the HTML page is browsed on Microsoft Windows platforms or Solaris operating environments. However, if the HTML page is on the Internet/intranet, the page is likely to be browsed by both Internet Explorer and Netscape Navigator browsers. You should activate the Java Plug-in if both Netscape Navigator browsers and Internet Explorer will browse the same HTML page. You can do this using the Java Plug-in OBJECT tag, as follows:

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 Editoin v 1.4 support for APPLET!!
</APPLET>      

New OBJECT tag:


<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
width="200" height="200" align="baseline"
codebase="http://java.sun.com/jpi/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/jpi/plugin-install.html">
<NOEMBED>
</COMMENT>
        No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
</NOMEMBED></EMBED>
</OBJECT>

Because Internet Explorer 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 Internet Explorer. Internet Explorer ignores test between the <COMMENT> and </COMMENT> tags. In effect, the above tags actually become:


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

This is identical to the OBJECT tag example outlined above. The </NOEMBED> and </EMBED> and tags are ignored by the OBJECT tag because there are no corresponding <NOEMBED> and <EMBED> tags.

Because Netscape Navigator browsers do not understand the OBJECT and COMMENT tags, they read the above 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/jpi/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. A Netscape Navigator browser ignores tags because they are an HTML extension in an Internet Explorer browser only.

This example illustrates that you can use the combined OBJECT-EMBED tag to activate Java Plug-in in the browser if either Internet Explorer or a Netscape Navigator browser is used. This combined tag is strongly recommended unless your HTML page is browsed by users in a homogeneous environment. The Java Plug-in HTML Converter from Sun Microsystems automatically converts HTML pages into this tag style for you.

Java Plug-in Anywhere

In an Internet/intranet environment, an HTML page is likely to be seen by browsers on different platforms. You should activate Java Plug-in only on the right browser and platform combination. Otherwise, you should use the browser's default JVM. You can achieve this using the following 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 support for APPLET!!
</APPLET>

New style tag:

The following is an example of an equivalent Java Plug-in tag. This 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/jpi/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/jpi/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 Internet Explorer and the EMBED tag for Netscape Navigator browsers. 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 Microsoft Windows platforms and the Solaris operating environment. 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 a Netscape browser. (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. In the table, IE stands for 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 95 w/IE 4.0 

"Mozilla/4.0 (compatible; MSIE 4.0; 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 3.51 w/Navigator 4.04 

"Mozilla/4.04 [en] (WinNT; I)“ 

Windows 95 w/Navigator 4.03 

"Mozilla/4.03 [en] (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 Internet Explorer under Windows 3.1 and Windows 3.51 would contain the substring "Windows 3.1" because Internet Explorer in these platforms is 16-bit. While Internet Explorer 4 is also available on Macintosh and the Solaris operating environment, in these versions the userAgent string does not contain the substring "Win". In addition, Internet Explorer on Windows CE does not support JavaScript. This can be summarized as follows:

userAgent string / Browser

contains “MSIE” 

contains “Win” 

does not contain “Windows 3.1” 

Windows 3.1 w/ IE 4 

 

Windows NT 3.51 w/ IE 4 

 

Windows 95 w/IE 4 

Windows NT 4.0 w/ IE 4 

Windows CE w/ IE 

 

 

 

Mac w/ IE 

 

UNIX w/ IE 

 

Other browsers on any platform 

 

 

The above table shows that only Windows 95 and Windows NT 4.0 with Internet Explorer can pass the Java Plug-in browser and platform requirements. However, this logic makes no assumptions about future releases of Internet Explorer or future releases of Microsoft Windows with Internet Explorer. As long as the userAgent string contains "MSIE" and "Win", the above code should work in future releases of Internet Explorer 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 Netscape Navigator browsers.) 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 Netscape Navigator browsers to determine the OS version number. This can be summarized as follows:

Testing logic / Browser 

appName contains “Netscape” 

userAgent contains "Win" 

userAgent does not contain "Win16" 

os.version does not contain 3.5 

userAgent contains "Sun" 

Windows 3.1 w/ Netscape 4 

 

 

Windows NT 3.51 w/ Netscape 4 

 

 

Windows 95 w/ Netscape 4 

 

Windows NT 4.0 w/ NS 4 

 

NS on Solaris 

 

 

 

IE on Solaris 

 

 

 

 

Netscape on other platform 

 

Depends on OS 

 

IE on other platform 

 

 

 

Other browsers on any platform 

 

 

 

 

 

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 Netscape Navigator browsers pass all the tests. Because LiveConnect is used to get the OS version number and only Netscape Navigator browsers supports LiveConnect, a JavaScript that accesses LiveConnect will not be understood by Internet Explorer. To prevent this from causing a problem, you block out this piece of the script using the COMMENT tag since COMMENT is an Internet Explorer-specific comment tag. The text between the COMMENT tag is ignored by Internet Explorer but not by Netscape Navigator browsers. In addition, you must specify the script language as JavaScript1.1 to block this out if the browser is Netscape Navigator 2.

At this point, the above logic for Internet Explorer and Netscape Navigator browsers 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 Internet Explorer running on the Windows 95, Windows 98 or Windows NT 4.0 operating environments. If the browser is the Netscape Navigator 4 browser 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/jpi/jinstall-14-win32.cab#Version=1,4,0,mn">
<NOEMBED><XMP> ');
    else if (_ns == true) document.writeln('<EMBED
    type="application/x-java-applet;version=1.4" width="200" height="200"
      align="baseline" code="XYZApp.class" codebase="html/"
      model="models/HyaluronicAcid.xyz"
      pluginspage="http://java.sun.com/jpi/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;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, Internet Explorer, and Netscape Navigator browsers 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/">
<PPARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
<PARAM NAME="scriptable" VALUE="true">
         No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
<PARAM NAME="java_type" VALUE="application/x-java-applet;jpi-version=1.4">
</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.

Internet Explorer on Windows 95, Windows 98 or Windows NT 4.0 reads the tags as follows:


<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
width="200" height="200" align="baseline"
codebase="http://java.sun.com/jpi/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="model" VALUE="models/HyaluronicAcid.xyz">
<PARAM NAME="java_type" VALUE="application/x-java-applet;jpi-version=1.4">
<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 Internet Explorer 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/jpi/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;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.

Netscape Navigator 4 on Windows 95, Windows 98 or Windows NT 4.0 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/jpi/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/jpi/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 heterogeneous 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 Internet Explorer and EMBED tag is used in Netscape Navigator browsers, 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.