如何从javascript调用WebStart部署的小程序函数?

如何从javascript调用WebStart部署的小程序函数?,java,javascript,applet,jnlp,next-generation-plugin,Java,Javascript,Applet,Jnlp,Next Generation Plugin,我希望能够使用javascript调用我的JNLP类的函数。让我们假设在我的小程序中有一个这样定义的函数:publicstringreturnsomething(){return“bla”} <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!-- ########################## IMPORTANT NOTE ############################ --

我希望能够使用javascript调用我的JNLP类的函数。让我们假设在我的小程序中有一个这样定义的函数:
publicstringreturnsomething(){return“bla”}

   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- ########################## IMPORTANT NOTE ############################ -->
<!-- This preview HTML page will work only with JDK 6 update 10 and higher! -->
<!-- ###################################################################### -->
<html>
    <head>
        <title>Test page for launching the applet via JNLP</title>
    </head>
    <body>
        <h3>Test page for launching the applet via JNLP</h3>
        <script src="http://java.com/js/deployJava.js"></script>
        <script>
            var attributes = {
                code:       "winToJnaApi.NewApplet",
                archive:    "JavaApplication6.jar, lib/jna.jar, lib/platform.jar",
                width:      300,
                height:     300,
                name:       "applet",
                id:         "app"
            };
            var parameters = {jnlp_href:"launch.jnlp"}; <!-- Applet Parameters -->
            var version = "1.5"; <!-- Required Java Version -->
            deployJava.runApplet(attributes, parameters, version);
        </script>

    <input type = "button" value ="click" onClick = "document.write(document.getElementById("app").doSomething())">
    <script type="text/javascript">
        document.write(document.getElementById("app"));
    </script>
    </body>
</html>

用于通过JNLP启动小程序的测试页面
用于通过JNLP启动小程序的测试页面
变量属性={
代码:“winToJnaApi.NewApplet”,
归档:“JavaApplication6.jar,lib/jna.jar,lib/platform.jar”,
宽度:300,
身高:300,
名称:“小程序”,
id:“应用程序”
};
var参数={jnlp_href:“launch.jnlp”};
var version=“1.5”;
runApplet(属性、参数、版本);
document.write(document.getElementById(“app”);
这是从javascript调用JNLP部署的小程序函数的正确方法吗?
因为这一个没有给我任何东西。

我知道使用JNLP启动的小程序不再可以被JS访问,但我可能错了。为了进一步研究,我建议删除deployJava.js并对applet元素进行硬编码。

我很久以前就得到了它,但我忘了回答我自己的问题。这就是:

假设您这样定义小程序:

<applet id="appletToTest" width=500 height=500 code="com.sample.SampleApplet" archive="JavaApplication6.jar, lib/lib1.jar, lib/lib2.jar">
   <param name="jnlp_href" value="launch.jnlp">
 </applet>
var parentAPPLET = document.getElementById("appletToTest");
public String returnSomething(){ return "bla"; }
var parentAPPLET = document.getElementById("appletToTest");
alert (parentAPPLET.returnSomething()); 
现在,无论小程序中有什么方法,它最好返回字符串或原语值,但即使它不返回字符串或原语值,您也可以对它进行操作,前提是您知道它的方法。 继续上面的示例,如果在小程序中定义了如下函数:

<applet id="appletToTest" width=500 height=500 code="com.sample.SampleApplet" archive="JavaApplication6.jar, lib/lib1.jar, lib/lib2.jar">
   <param name="jnlp_href" value="launch.jnlp">
 </applet>
var parentAPPLET = document.getElementById("appletToTest");
public String returnSomething(){ return "bla"; }
var parentAPPLET = document.getElementById("appletToTest");
alert (parentAPPLET.returnSomething()); 
然后您可以使用javascript调用它,如下所示:

<applet id="appletToTest" width=500 height=500 code="com.sample.SampleApplet" archive="JavaApplication6.jar, lib/lib1.jar, lib/lib2.jar">
   <param name="jnlp_href" value="launch.jnlp">
 </applet>
var parentAPPLET = document.getElementById("appletToTest");
public String returnSomething(){ return "bla"; }
var parentAPPLET = document.getElementById("appletToTest");
alert (parentAPPLET.returnSomething()); 
祝贺您,您从JWS部署的javascript调用了JavaApplet方法


还有另一种方法,但它只能在Firefox中使用,所以最好使用这种方法。LiveConnect规则仍然适用,即使该技术已被弃用。

在我看来,这似乎是一种不同寻常的限制/安全考虑。如果真是这样,那么我将是一只悲伤的熊猫……我不相信这与安全有任何关系。在pre-plug-in 2 JRE中标准的小程序间通信也消失了。那么我应该如何调用小程序的功能呢?仅通过小程序本身中的控件?如果javascript被允许与纯applet通信,那么它不应该也能够与通过WebStart部署的纯applet通信吗?你已经达到了我关于这个主题的知识的极限。很抱歉