Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации

<Содержание

Передача Java-to-Javascript


Этот раздел включает следующие темы:

Введение

Плагин Java предлагает два способа получить доступ к ДОМУ: Через JSObject и через Общий API ДОМА. Каждый метод описывается ниже, наряду с соображениями безопасности.

JSObject

Апплеты Java, возможно, должны выполнить передачу Java к JavaScript, чтобы получить доступ к Объектной модели документа (ДОМ) или вызвать функции JavaScript на странице HTML. Браузеры позволяют передачу между Java и JavaScript через класс обертки Java netscape.javascript.JSObject. Для получения дополнительной информации см. Пакеты Java для LiveConnect.

Поскольку механизм рендеринга JavaScript реализуется по-другому между браузерами, Плагин Java обеспечивает различные степени поддержки JSObject в Internet Explorer и Навигаторе. Этот документ определяет как JSObject поддерживайте работы в различных средах браузера.

Как JSObject Работы

JSObject обеспечивает легкий способ получить доступ к ДОМУ страницы HTML. Но потому что различные браузеры реализуют ДОМА по-другому, используя JSObject в Java апплет может привести к различным поведениям в Плагине Java. Для получения дополнительной информации о реализации ДОМА в определенном браузере, консультируйтесь с руководством разработчика для того браузера.

Вообще, доступ апплетов JSObject следующим образом:

import netscape.javascript.*;
import java.applet.*;
import java.awt.*;
class MyApplet extends Applet {
     public void init() {
         JSObject win = JSObject.getWindow(this);
         JSObject doc = (JSObject) win.getMember("document");
         JSObject loc = (JSObject) doc.getMember("location");

         String s = (String) loc.getMember("href");  // document.location.href
         win.call("f", null);                      // Call f() in HTML page
     }
}

Начальная точка static метод

public static JSObject getWindow(Applet a) 

который возвращает a JSObject представление Window это содержит данный апплет. Так как этот метод берет только java.applet.Applet как параметр, JSObject может быть получен доступ от апплета, но не от боба, если боб не является также апплетом.

Однажды Window объект получается, апплет может провести по ДОМУ страницы HTML, используя следующие методы:

Мы рекомендуем использовать только getWindow(), call(), eval(), setMember() и getMember() в Плагине Java. Реализации getSlot(), setSlot(), removeMember() и toString() зависимы от браузера; то есть, результат выполнения может измениться в зависимости от версии и платформы браузера, в котором работает Плагин Java.

Для получения дополнительной информации об использовании JSObject, пожалуйста, считайте раздел, вызванный "Java к Передаче JavaScript" на странице LiveConnect.

Скомпилировать код Java, чтобы использовать в своих интересах JSObject, у Вас должен быть пакет netscape.javascript в CLASSPATH. Так как 1.4.2 Плагина Java поставляют netscape.javascript в вызванном файле JAR plugin.jar. Скомпилировать апплет, который использует JSObject, добавить plugin.jar в CLASSPATH перед компиляцией.

Отметьте это хотя JSObject поддерживается в Плагине Java, он не поддерживается в AppletViewer в Java платформа SE. В результате использование апплетов JSObject возможно, не работает в AppletViewer или приводит к исключениям.

Включение JSObject Поддержка в Плагине Java

Из-за соображений безопасности, JSObject поддержка не включается в Плагине Java по умолчанию. Включать JSObject поддержка в Плагине Java, новый атрибут вызывают MAYSCRIPT потребности присутствовать в EMBED/OBJECT тег следующим образом:

Исходный APPLET тег: 

<APPLET code="XYZApp.class" codebase="html/" align="baseline"
     width="200" height="200" MAYSCRIPT>
<PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
     No JDK 1.3 support for APPLET!!
</APPLET>

Новый OBJECT тег: 

<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
     width="200" height="200" align="baseline"
     codebase="http://java.sun.com/products/plugin/1.3/jinstall-13-win32.cab#Version=1,3,0,0">
     <PARAM NAME="code" VALUE="XYZApp.class">
     <PARAM NAME="codebase" VALUE="html/">
     <PARAM NAME="type" VALUE="application/x-java-applet;version=1.3">
     <PARAM NAME="MAYSCRIPT" VALUE="true">
     <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
        No JDK 1.3 support for APPLET!!
</OBJECT>

Новый EMBED тег:

<EMBED type="application/x-java-applet;version=1.3" width="200"
   height="200" align="baseline" code="XYZApp.class"
   codebase="html/" model="models/HyaluronicAcid.xyz" MAYSCRIPT=true
   pluginspage="http://java.sun.com/products/plugin/1.3/plugin-install.html">
<NOEMBED>
   No JDK 1.3 support for APPLET!!
</NOEMBED>
</EMBED>

Если MAYSCRIPT определяется как ложь, или если MAYSCRIPT отсутствует, JSObject отключается. Для получения дополнительной информации о MAYSCRIPT атрибут в EMBED/OBJECT тегируйте, см. Используя OBJECT, EMBED и APPLET Теги в Плагине Java.
          

JavaScript и LiveConnect являются технологиями от Netscape Communications Corporation. Из-за различий в механизме Javascript, реализованном Mozilla и Microsoft, маршалинг данных между Java и JavaScript через LiveConnect может привести к различным типам данных для различных браузеров. Основные отличия в реализациях JavaScript от поставщиков находятся в поддержке типа данных JavaScript, отображении типов данных между Java и JavaScript, и реализацией элемента ДОМА.

Отметить

Исходная спецификация JavaScript доступна в http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.3/guide/index.html.

Исходная спецификация LiveConnect доступна в http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.3/guide/lc.html#1037078.

Общий API ДОМА

Краткий обзор

Этот раздел обсуждает Общий API ДОМА в Плагине Java 6. Это обеспечивает стандартный API для того, чтобы он получил доступ к ДОМУ в браузере для браузеров от различных поставщиков браузера, работающих на различных платформах.

Отметить

Полной поддержке предоставляют Internet Explorer 6 и поддерживаемые браузеры Mozilla. Поддержка ограничивается с другими браузерами.

Этот API создается на Объектной модели документа (ДОМ) рекомендация Уровня 2. (См. http://www.w3.org/DOM/ для различных w3c рекомендаций.) Объектная модель документа (ДОМ) является рядом интерфейсов, определенных, используя Язык определения интерфейсов (IDL) и включая Привязки к языку Java.

Общий API ДОМА включает следующие w3c-определенные интерфейсные пакеты:

DOMService

Общие классы ДОМА позволяют приложению получать доступ к базовому ДОМУ браузера через API в org.w3c.dom и org.w3c.dom.html пакеты.

Каждый ДОМ представляет базовое представление единственного документа XML/HTML в пределах браузера, и каждый браузер может вывести на экран больше чем один документ XML/HTML в многократных фреймах/окнах браузера. Таким образом, когда приложение запрашивает получить доступ к ДОМУ через Общие классы ДОМА, важно возвратить ДОМА, связанного с приложением. Чтобы получить надлежащего ДОМА, связанного с приложением, к объекту Java передадут DOMService.getService(). DOMService возвратит надлежащее DOMService будут брошены реализации, связанные с объектом, или исключением. Обычно объект Java является компонентом JavaBeans или апплетом. Однако, эта спецификация не устраняет другие типы объекта Java от того, чтобы быть используемым, если DOMServiceProvider может обработать это.

Выполнять действие на ДОМЕ, объект, который реализует DOMAction к должны будут передать DOMService.invokeAndWait() или DOMService.invokeLater(). DOMAction.run() будет тогда выполняться на доступе ДОМА, диспетчеризируют поток. 

Вот простой пример получения заголовка объекта Документа:

DOMService service = null;

try
{
    service = DOMService.getService(MyApplet);
    String title = (String) service.invokeAndWait(new DOMAction()
                            {
                                public Object run(DOMAccessor accessor)
                                {
                                     HTMLDocument doc = (HTMLDocument) accessor.getDocument(MyApplet);
                                     return doc.getTitle();
                                }
                            });
}
catch (DOMUnsupportedException e1)
{
}
catch (DOMAccessException e2)
{
}

DOMService Plugability

С тех пор может быть больше чем один DOMServiceProvider, важно позволить третьим сторонам включать их DOMServiceProvider реализации в Общие классы ДОМА. Достигнуть этого, нового свойства Java, com.sun.browser.dom.DOMServiceProvider, определяется.

Если это свойство определяется, оно должно содержать список имен классов DOMServiceProvider реализации, каждый разделенный символом "|".

Когда DOMService.getService() вызывается, DOMServiceProvider реализации, определенные com.sun.browser.dom.DOMServiceProvider будет вызван один за другим, чтобы определить, может ли обеспечивание определить ассоциацию ДОМА объекта согласно порядку, который определяется в свойстве. В случае, если два DOMServiceProvider реализации могут быть в состоянии обработать тот же самый объект, провайдер, который определяется сначала в свойстве, будет использоваться.

Потокобезопасность

Поскольку ДОМ каждого браузера реализуется по-другому, доступ ДОМА, как ожидают, не будет ориентирован на многопотоковое исполнение. Доступ к реализации объектов ДОМА в этой спецификации должен быть ограничен на доступе ДОМА, диспетчеризируют поток только, таким образом, поток безопасно может быть обеспечен. Чтобы выполнить это, код, получающий доступ к объектам ДОМА, должен быть определяющим контекст в пределах DOMAction.run() блок. Вызвать действие, также DOMService.invokeAndWait() или DOMService.invokeLater() должен использоваться, так, чтобы DOMAction.run() будет выполняться в доступе ДОМА, диспетчеризируют поток.

Хотя реализации объектов ДОМА нельзя вызвать вне DOMAction.run() блок, приложение может кэшировать эти объекты ДОМА вокруг как члена экземпляра класса, или передать эти объекты ДОМА между потоками. Однако, кэширование объектов ДОМА как статические элементы любого объекта запрещается, так как статические элементы имеют тенденцию оставаться вокруг намного дольше чем жизненный цикл базового объекта ДОМА.

Единственный объект в Общих классах ДОМА, которые можно вызвать от любого потока, DOMService. Доступ к другим объектам в Общих классах ДОМА ограничивается в пределах DOMAction.run() блок; иначе, исключение будет выдано.

Безопасность

ДОМ браузера обеспечивает доступ к каждой службе в браузере, таким образом, важно гарантировать, что безопасность проверяется должным образом во время каждого вызова в ДОМА. Когда DOMService.invokeAndWait() или DOMService.invokeLater() вызывается, контекст защиты вызывающей стороны будет получен. Позже, когда соответствие DOMAction.run() выполняется на доступе ДОМА, диспетчеризируют поток, контекст защиты вызывающей стороны передадут к браузеру ДОМ, когда реализации объектов ДОМА вызовут. DOMAccessException будет брошен, если у исходной вызывающей стороны не будет необходимых полномочий получить доступ к ДОМУ.

Политика безопасности доступа ДОМА в каждом браузере отличается. В результате, даже если приложение Java подписывается и полностью доверяется, получая доступ к объектам ДОМА в браузере может все еще привести к DOMAccessException.

Время жизни ДОМА Обджекта

Реализация объектов ДОМА представляет реальные базовые объекты в браузере ДОМ. Поскольку документ XML/HTML изменяется непрерывный, объекты ДОМА в Java больше, возможно, не допустимы. Доступ к недопустимому объекту ДОМА приведет к org.w3c.dom.DOMException, согласно W3C ДОМ Левель 2 Спецификации. Разработчики, которые пишут код, чтобы получить доступ к объектам ДОМА в DOMAction.run() не должен принять законность объектов ДОМА в любой данный момент. 

Требования соответствия

Третьи стороны реализовывая эту спецификацию должны обеспечить реализации Общих классов ДОМА в com.sun.browser.dom пакет. Реализации W3C ДОМ Левель 2 API должны также соответствие к W3C ДОМ Левель 2 Спецификации. Однако, потому что каждый браузер может реализовать различное подмножество W3C API ДОМА, третьи стороны не обязаны обеспечивать реализации всех org.w3c.dom и org.w3c.dom.html классы.

Пакет com.sun.browser.dom

Этот раздел определяет API com.sun.browser.dom пакет.

public abstract class DOMService       

DOMService определяет API службы, который включает приложениям к доступу a document объект, представляющий базового ДОМА браузера window это встраивает приложения.

public abstract class DOMService 
{
       /**
        * Returns new instance of a DOMService. The implementation
        * of the DOMService returns depending on the setting of the
        * javax.browser.dom.DOMServiceProvider property or, if the
        * property is not set, a platform-specific default.
        * 
        * Throws DOMUnsupportedException if the DOMService is not 
        * available to the obj.
        *
        * @param obj Object to leverage the DOMService
        */
       public static DOMService getService(Object obj) throws DOMUnsupportedException;

       /**
        * An empty constructor is provided. Implementations of this
        * abstract class must provide a protected no-argument constructor
        * in order for the static getService() method to work correctly.        
        * Application programmers should not be able to directly
        * construct implementation subclasses of this abstract subclass.
        */
       protected DOMService();

       /**
        * Causes action.run() to be executed synchronously on the 
        * DOM action dispatching thread. This call will block until all 
        * pending DOM actions have been processed and (then) 
        * action.run()
returns. This method should be used when an 
        * application thread needs to access the browser's DOM. 
        * It should not be called from the DOMActionDispatchThread
        * 
        * Note that if the DOMAction.run() method throws an uncaught 
        * exception (on the DOM action dispatching thread), it's caught 
        * and re-thrown as an DOMAccessException on the caller's thread.
        * 
        * @param action DOMAction.
        */    
       public abstract Object invokeAndWait(DOMAction action) throws DOMAccessException;

       /**
        * Causes action.run() to be executed asynchronously on the 
        * DOM action dispatching thread. This method should be used 
        * when an application thread needs to access the browser's 
        * DOM. It should not be called from the DOMActionDispatchThread
        *
        * Note that if the DOMAction.run() method throws an uncaught 
        * exception (on the DOM action dispatching thread), it will not be
        * caught and re-thrown on the caller's thread.
        * 
        * @param action DOMAction.
        */    
       public abstract void invokeLater(DOMAction action);
}

Отметьте это Object obj в getService(Object obj) метод выше является апплетом или бобом.

public abstract class DOMServiceProvider

Экземпляры реализации public abstract class DOMServiceProvider доступ включения к базовому браузеру ДОМ для данного объекта Java. Экземпляры DOMServiceProvider не должен быть получен приложением непосредственно.

public abstract class DOMServiceProvider
{
       /**
        * An empty constructor is provided. Implementations should 
        * provide a protected constructor so that the DOMService
        * can instantiate instances of the implementation class. 
        * Application programmers should not be able to directly
        * construct implementation subclasses of this abstract subclass.
        * The only way an application should be able to obtain a 
        * reference to a DOMServiceProvider implementation
        * instance is by using the appropriate methods of the
        * DOMService.
        */
       protected DOMServiceProvider();

       /**
        * Returns true if the DOMService can determine the association
        * between the obj and the underlying DOM in the browser.
        */
       public abstract boolean canHandle(Object obj);

       /**
        * Returns the Document object of the DOM.
        */
       public abstract org.w3c.dom.Document getDocument(Object obj) throws DOMUnsupportedException;

       /**
        * Returns the DOMImplemenation object of the DOM.
        */
       public abstract org.w3c.dom.DOMImplementation getDOMImplementation();
}

Отметьте это Object obj в canHandle(Object obj) и getDocument(Object obj) методы выше являются апплетом или бобом.

public interface DOMAccessor

DOMAccessor представляет интерфейс, который может использоваться в пределах DOMAction.run() получить доступ к точке входа браузера ДОМ.

public interface DOMAccessor
{
       /**
        * Returns the Document object of the DOM.
        */
       public org.w3c.dom.Document getDocument(Object obj) throws org.w3c.dom.DOMException;

       /**
        * Returns a DOMImplementation object.
        */
       public org.w3c.dom.DOMImplementation getDOMImplementation();

Отметьте это Object obj в getDocument(Object obj) метод выше является апплетом или бобом.

public interface DOMAction

DOMAction инкапсулирует все действия приложений, которые будут выполняться на ДОМЕ браузера.

public interface DOMAction
{
       /**
        * When an object implementing interface DOMAction is passed
        * to DOMService.invokeAndWait() or DOMService.invokeLater(),
        * the run method is called in the DOM access dispatch thread.
        *
        * accessor is used for the DOMAction to access the entry point of 
        * the browser's DOM, if necessary.
        *
        * @param accessor DOMAccessor
        */
       public Object run(DOMAccessor accessor);
}

public class DOMUnsupportedException

Это исключение выдается от DOMService.getService() и DOMServiceProvider.getDocument() если ассоциация между объектом Java и ДОМОМ не может быть найдена.

public class DOMUnsupportedException extends Exception
{    
       /**
        * Constructs a new DOMUnsupportedException with no detail message.
        */               
       public DOMUnsupportedException();

       /**
        * Constructs a new DOMUnsupportedException with the given detail message.
        *
        * @param msg Detail message.
        */               
       public DOMUnsupportedException(String msg);

       /**
        * Constructs a new DOMUnsupportedException with the given exception as a root clause.
        *
        * @param e Exception.
        */               
       public DOMUnsupportedException(Exception e);

       /**
        * Constructs a new DOMUnsupportedException with the given exception as a root clause and the given          * detail message.
        *
        * @param e Exception.
        * @param msg Detail message.
        */               
       public DOMUnsupportedException(Exception e, String msg);

       /**
        * Returns the detail message of the error or null if there is no detail message.
        */               
       public String getMessage();

       /**
        * Returns the root cause of the error or null if there is none.
        */               
       public Exception getException();   
}           

public class DOMAccessException

Это исключение выдается от DOMService.accessAndWait() если какой-либо ДОМ возражает, выдает любое исключение, когда в пределах него получают доступ DOMAction.run().

public class DOMAccessException extends Exception
{    
       /**
        * Constructs a new DOMAccessException with no detail message.
        */               
       public DOMAccessException();

       /**
        * Constructs a new DOMAccessException with the given detail message.
        *
        * @param msg Detail message.
        */               
       public DOMAccessException(String msg);

       /**
        * Constructs a new DOMAccessException with the given exception as a root clause.
        *
        * @param e Exception.
        */               
       public DOMAccessException(Exception e);

       /**
        * Constructs a new DOMAccessException with the given exception as a root clause and the given          * detail message.
        *
        * @param e Exception.
        * @param msg Detail message.
        */               
       public DOMAccessException(Exception e, String msg);

       /**
        * Returns the detail message of the error or null if there is no detail message.
        */               
       public String getMessage();

       /**
        * Returns the root cause of the error or null if there is none.
        */               
       public Exception getException();   
}

Oracle и/или его филиалы Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами