|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Апплеты Java могут вызвать функции JavaScript, существующие в той же самой веб-странице как апплет. Спецификация LiveConnect описывает детали о том, как код JavaScript связывается с кодом Java.
netscape.javascript.JSObject class позволяет апплетам Java получить ссылку на объекты JavaScript и взаимодействовать с веб-страницей. Сводный апплет Данных, описанный затем, вызывает код JavaScript, чтобы получить информацию от веб-страницы и записывает сводку данных обратно к веб-странице.
Предположите, что у Вас есть веб-страница с несколькими функциями JavaScript. Пример
<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 в своем браузере так, чтобы сценарий Инструментария Развертывания мог функционировать должным образом.