Spec-Zone .ru
спецификации, руководства, описания, API
|
Апплеты Java могут вызвать функции JavaScript, существующие в той же самой веб-странице как апплет. Спецификация LiveConnect описывает детали о том, как код JavaScript связывается с кодом Java.
netscape.javascript.JSObject
class позволяет апплетам Java получить ссылку на объекты JavaScript и взаимодействовать с веб-страницей. Сводный апплет Данных, описанный затем, вызывает код JavaScript, чтобы получить информацию от веб-страницы и записывает сводку данных обратно к веб-странице.
Предположите, что у Вас есть веб-страница с несколькими функциями JavaScript. Пример
имеет функции JavaScript, чтобы получить возраст, адрес, и номера телефона. Есть также вызванная переменная AppletPage.html
userName
у которого нет никакого значения в начале.
<head> <title>Data Summary Applet Page - Java to JavaScript LiveConnect</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/> <script language="javascript"> var userName = ""; // returns number function getAge() { return 25; } // returns an object function address() { this.street = "1566 Greenwood Lane"; this.city = "Santa Clara"; this.state = "CA"; } // returns an array function getPhoneNums() { return ["408-111-2222", "408-333-4444"]; } function writeSummary(summary) { summaryElem = document.getElementById("summary"); summaryElem.innerHTML = summary; } </script> <!-- ... --> </head> <body> <script src = "http://www.java.com/js/deployJava.js"></script> <script> <!-- ... --> deployJava.runApplet(attributes, parameters, '1.6'); </script> <!-- ... --> <p id="summary"/> // this HTML element contains // the summary <!-- ... --> </body>
Затем, считайте апплет class вызванный DataSummaryApplet
. DataSummaryApplet
class выполняет следующие операции.
JSObject
's setMember
метод, чтобы установить userName
переменная "Джону Доу".writeSummary
Функция JavaScript, чтобы записать сводку обратно к веб-странице.Этот апплет сначала должен получить ссылку на JSObject
следующим образом:
... JSObject window = JSObject.getWindow(this); ...
Поместите предыдущий оператор в попытку... ловят.. блокируйте, чтобы обработать netscape.javascript.JSException
.
Теперь, когда у апплета есть ссылка на JSObject
, это может вызвать соответствующие функции JavaScript при использовании eval
и call
методы JSObject
.
package javatojs; import java.applet.Applet; import netscape.javascript.*; // add plugin.jar to classpath during compilation public class DataSummaryApplet extends Applet { public void start() { try { JSObject window = JSObject.getWindow(this); String userName = "John Doe"; // set JavaScript variable window.setMember("userName", userName); // invoke JavaScript function Number age = (Number) window.eval("getAge()"); // get a JavaScript object and retrieve its contents JSObject address = (JSObject) window.eval("new address();"); String addressStr = (String) address.getMember("street") + ", " + (String) address.getMember("city") + ", " + (String) address.getMember("state"); // get an array from JavaScript and retrieve its contents JSObject phoneNums = (JSObject) window.eval("getPhoneNums()"); String phoneNumStr = (String) phoneNums.getSlot(0) + ", " + (String) phoneNums.getSlot(1); // dynamically change HTML in page; write data summary String summary = userName + " : " + age + " : " + addressStr + " : " + phoneNumStr; window.call("writeSummary", new Object[] {summary}) ; } catch (JSException jse) { jse.printStackTrace(); } } }
Скомпилировать код Java, у которого есть ссылка на классы в netscape.javascript
пакет, включать <your JDK path>/jre/lib/plugin.jar
в Вашем пути к классу. Во времени выполнения программное обеспечение Плагина Java автоматически делает эти классы доступными для апплетов.
Сводный апплет Данных выводит на экран следующий результат на веб-странице:
Result of applet's Java calls to JavaScript on this page John Doe : 25 : 1566 Greenwood Lane, Santa Clara, CA : 408-111-2222, 408-333-4444
Открытый
в браузере, чтобы просмотреть Сводный апплет Данных.AppletPage.html
Если Вы не видите, что апплет работает, Вы должны установить, по крайней мере,
Если Вы не видите, что пример работает, Вы, возможно, должны были бы включить интерпретатору JavaScript в своем браузере так, чтобы сценарий Инструментария Развертывания мог функционировать должным образом.