[Chapter 19] 19.8 Summary
Author: David Flanagan
Date: Fri Aug 29 11:05:25 1997

#

| Chapter 19 LiveConnect: JavaScript and Java |

## 19.8 Summary

LiveConnect allows JavaScript and Java to cooperate through two fairly separate and symmetrical systems. In JavaScript, the JavaPackage, JavaClass, JavaObject, JavaArray, and JavaMethod objects all allow JavaScript to read and write Java properties and arrays and to invoke Java methods. In Java, the netscape.javascript.JSObject class allows Java programs to read and write properties of JavaScript objects and elements of JavaScript arrays, to invoke JavaScript functions, and evaluate strings of JavaScript code. The following two subsections summarize these two halves of LiveConnect.

### JavaScript to Java

- The JavaClass, JavaObject, JavaArray, and JavaMethod objects allow transparent communication between JavaScript and Java--they handle data conversion and all the tricky behind-the-scenes work.

- The data conversions performed when JavaScript reads and writes Java values are illustrated in Figure 19.2 and Figure 19.3.

- Most Java objects are converted to JavaScript JavaObject objects. JavaObjects behave differently than other JavaScript objects, and need to be handled with care. In particular, JavaObjects are converted to numeric, Boolean and string values differently than other JavaScript types are.

- You can use the JavaPackage objects referred to by the Window properties `Packages`, `java`, `sun`, and `netscape` to obtain a JavaClass object for any of the standard classes built in to Navigator. The JavaClass object allows you to read and write static properties and invoke static methods of a class.

- You can use the `new` operator on a JavaClass object to create a new Java object and a JavaScript JavaObject wrapper for it. You can use this JavaObject to read and write instance fields and invoke instance methods.

- You can use the `getClass()` function to obtain a JavaClass object corresponding to the Java class of a JavaObject object.

- You can "script" Java directly from JavaScript simply by working with the predefined classes. But this technique is limited--no significant user interaction with a "scripted" Java program is possible.

- You can also use the `document.applets[]` array and the JavaObject objects it contains to interact with applets. Manipulating the fields and methods of a custom-written applet allows a richer set of possibilities than simply scripting with the basic Java classes.

- You can use the `document.embeds[]` array and the JavaObjects it contains to interact with the plug-ins that are displaying embedded data in the document. You can control plug-ins through vendor-specific Java APIs.

### Java to JavaScript

- The netscape.javascript.JSObject class is the Java equivalent of the JavaScript JavaObject class. It handles data conversion and all the behind-the-scenes work to allow Java code to communicate with JavaScript.

- The data conversions performed when Java reads and writes JavaScript data are illustrated in Figure 19.5 and Figure 19.6.

- The `getMember()` and `getSlot()` methods of a JSObject allow Java to read JavaScript object properties and array elements.

- The `setMember()` and `setSlot()` methods allow Java to set the value of JavaScript object properties and array elements.

- The `call()` method of a JSObject allows Java to invoke JavaScript functions.

- The `eval()` method of a JSObject allows Java to pass an arbitrary string of JavaScript code to the JavaScript interpreter for execution. This method is often easier to use than the other JSObject methods.

- An applet that uses the JSObject class must import it with an `import` statement. To compile the applet, the `CLASSPATH` environment variable must be set to include the Java classes supplied by Netscape.

- In order to interact with JavaScript, an applet must be embedded in an HTML document with an `<APPLET>` tag that includes the `MAYSCRIPT` attribute.

Working with Java in Internet Explorer |  | JavaScript Security