简体   繁体   English

如何从javascript调用WebStart部署的applet函数?

[英]How to call WebStart-deployed applet functions from javascript?

I would like to be able to call with javascript a function of my JNLP class. 我希望能够使用javascript调用我的JNLP类的函数。 Let's assume in my applet I have a function defined like this: public String returnSomething(){ return "bla"; } 假设在我的applet中,我定义了一个这样的函数: public String returnSomething(){ return "bla"; } public String returnSomething(){ 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>

Is this the proper way to call JNLP-deployed applet functions from javascript? 这是从javascript调用JNLP部署的applet函数的正确方法吗? Cause this one doesn't give me anything. 因为这个没有给我任何东西。

I got it a long time ago, but I forgot to answer my own question. 我很久以前就知道了,但是我忘了回答自己的问题。 So here it is: 所以这里是:

Let's assume you define your applet like this: 假设您这样定义小程序:

<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>

You can get a javascript! 你可以得到一个JavaScript! handle to the applet like this: 像这样处理小程序:

var parentAPPLET = document.getElementById("appletToTest");

Now, whatever method you have in your applet, it better return String or a primitive value, but even if it doesn't you may operate on it assuming you know its methods. 现在,无论您的applet中有什么方法,最好返回String或原始值,但是即使没有,您也可以假设知道它的方法来对其进行操作。 Continuing my example from above, if in your applet you have a function defined like this: 从上面继续我的示例,如果您的小程序中具有如下定义的函数:

public String returnSomething(){ return "bla"; }

Then you can call it with your javascript like this: 然后,您可以使用javascript来调用它,如下所示:

var parentAPPLET = document.getElementById("appletToTest");
alert (parentAPPLET.returnSomething()); 

And congratulations, you called a Java Applet method from javascript that was deployed by JWS. 恭喜,您从JWS部署的javascript调用了Java Applet方法。

There is another way of doing that but it would work only in Firefox, so better use this one. 还有另一种方法,但是它只能在Firefox中工作,因此最好使用此方法。 LiveConnect rules still apply, even though the technology is deprecated. 即使已弃用该技术,LiveConnect规则仍然适用。

I understand that applets launched using JNLP are no longer accessible to JS, but I might be wrong. 我知道使用JS不再可以访问使用JNLP启动的小程序,但是我可能错了。 To investigate it further, I would recommend removing the deployJava.js and hard coding the applet element. 为了进一步调查,我建议删除deployJava.js并对applet元素进行硬编码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM