2010-10-29 82 views
2

我希望能夠用javascript調用我的JNLP類的一個函數。讓我們在我的小程序假設我有這樣定義的函數:public String returnSomething(){ return "bla"; }如何從JavaScript調用WebStart部署的applet函數?

<!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部署的小應用程序的功能從JavaScript的正確方法? 因爲這個不給我任何東西。

回答

5

我很久以前就知道了,但我忘了回答我自己的問題。所以在這裏,它是:

讓我們假設你像這樣定義你的小程序:

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

你可以得到一個javascript!處理的小程序是這樣的:

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

現在,任何你在你的applet有,它更好的回報字符串或原始值,但即使沒有,你可以對它進行操作假設你知道它的方法。繼續 我的例子從上面,如果你的小程序,你有一個像這樣定義一個函數:

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

然後你就可以用你的JavaScript這樣稱呼它:

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

而且恭喜你,你叫來自JWS部署的JavaScript的Java Applet方法。

還有一種方法可以做到這一點,但它只適用於Firefox,所以最好使用這個。 LiveConnect規則仍然適用,即使該技術已被棄用。

1

據我所知,使用JNLP啓動的小程序不再可供JS訪問,但我可能是錯的。爲了進一步調查,我建議刪除deployJava.js並對applet元素進行硬編碼。

+1

對我來說就像一個不尋常的限制/安全考慮。如果真的如此,那麼我將成爲一隻傷心的熊貓...... – 2010-10-30 09:39:44

+0

我不認爲它與安全有關。在預插件2個JRE中標準的小應用程序間通信也消失了。 – 2010-10-30 10:13:33

+2

那麼我該如何調用applet的功能呢?只有通過applet本身的控制?如果允許javascript與純applet通信,它不應該也可以與通過Web Start部署的純applet進行通信。 – 2010-10-30 11:59:43