Cómo comunicarse entre el navegador y el applet Java Web Start

Situación actual

Actualmente utilizamos un applet para realizar algunas operaciones, después de lo cual redirige la página actual. En su núcleo, puede ver el applet de la siguiente manera:

public class ExampleApplet extends Applet {
    @Override
    public void init() {
        Button redirect = new Button("Redirect");
        this.add(redirect);
        final String target = this.getParameter("targetPage");
        redirect.addActionListener((ActionEvent e) -> {
            try {
                getAppletContext().showDocument(new URL(target), "_parent");
            } catch (MalformedURLException ex) {}
        });
    }
}

con el applet llamado de la manera más simple:

<applet code="com.example.applet.ExampleApplet.class" archive="${appletUrl}" width="100" height="30">
    <param name="targetPage" value="http://localhost:8080/applet/"/>
</applet><br/><br/>

dónde${appletUrl} devuelve la ubicación del applet JAR.

Entonces el applet no es más que un simple botón que llamagetAppletContext().showDocument(new URL(target), "_parent"); para actualizar la página actual. Esto ha hecho su trabajo correctamente durante mucho tiempo. Ahora aquí está el problema.

Migración

Como muchos sabrán, Chrome no es compatibleApplets. Que se dejó de lado por un tiempo desdeIE yFireFox Todavía los apoyé. A finales de 2016, ya no los apoyarán. Entonces decidimos migrar el applet usandoJWS yJNLP.

La migración de este sencillo ejemplo de botón de redireccionamiento daría lo siguientehtml fragmento yJNLP archivo:

<a href="${jnlpUrl}">Launch JNLP</a>

${jnlpUrl} devuelve la ubicación aJNLP archivo que es:

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://localhost:8080/applet/assets/1.0-SNAPSHOT-DEV/app/assets/" href="jnlp/example.jnlp">
    <security>
        <all-permissions/>
    </security>
    <resources>
        <j2se version="1.5+" initial-heap-size="32m" max-heap-size="128m" />
        <property name="jnlp.versionEnabled" value="false"/>
        <jar href="applets/ExampleApplet.jar" main="true"/>
    </resources>
    <applet-desc name="code" main-class="com.example.applet.ExampleApplet.class" width="30" height="30" >
        <param name="targetPage" value="http://localhost:8080/applet/"/>
    </applet-desc>
</jnlp>

Hasta ahora todo bien, el mismo applet se implementa con éxito comoJWS solicitud. Permitir que se use desde cualquier navegador ya que se ejecuta fuera de él. Lo cual también es una especie de problema.

El problema

La líneagetAppletContext().showDocument(new URL(target), "_parent"); todavía hace una redirección, pero está usando el navegador predeterminado como se indica en eldocumentación de migración.

Para AppletContext.showDocument (URL url, destino de cadena), la tecnología Java Web Start ignorará el argumento objetivo.

De forma similar a AppletContext.showDocument, las aplicaciones Java Web Start pueden mostrar una página HTML utilizando el navegador web predeterminado del sistema mediante la API BasicService.showDocument.

Entonces, si mi navegador predeterminado es Firefox, pero estoy navegando hacia estoJWS-enabled applet en IE / Chrome, se abrirá una nueva pestaña en Firefox. ¡Esto es un problema, ya que tengo información (por ejemplo, inicio de sesión) almacenada en el navegador original!

Recomendaciones

Como la aplicación se ejecuta fuera del navegador, tengo problemas para pensar en las posibilidades de comunicarme de nuevo con el navegador original. No puedo usarJavaScript ya que no se ejecuta dentro del navegador. Realmente no puedo definir una forma independiente del sistema para abrir una pestaña en el navegador original. También he pensado enWebSockets ya que podrían permitir la comunicación directa, pero por lo que he leído es bastante de alto nivel y requiere un servidor, no un simple applet.

¿Existe alguna posibilidad de comunicarse entre el navegador original (por ejemplo, websockets y parámetros) o pasar la sesión de un navegador a otro cuando el applet abre una nueva ventana?

Respuestas a la pregunta(2)

Su respuesta a la pregunta