2011-02-24 78 views
0

我有一个JAVA中的代码/类/脚本,当有人点击一个按钮/我将处理的任何东西时,我想执行它。什么应该是JavaScript中的代码来启动在客户端的系统上安装的类/代码/脚本/编译程序?如何从客户端的JavaScript执行Java文件

+0

不可能没有浏览器特定的扩展... – yent 2011-02-24 12:41:15

+0

但我已经看到了使用该 – kritya 2011-02-24 12:43:01

+0

如何嵌入一个[功能]一些网站(http://java.sun.com/applets/)? – erickb 2011-02-24 12:43:34

回答

1

这取决于您在客户端使用该程序所要做的事情。如果你想在客户端的机器上调用其他程序,你将需要一些东西。

  1. 来自SSL供应商的代码签名证书。
  2. 您需要创建一个扩展Applet的类。
  3. 对于任何你想在客户端机器上执行的操作,你都需要一个实现了java.security.PrivilegedAction的类。
  4. 现在你应该真的使用objet和embed标签代替applet。
  5. 将属性添加到允许从Javascript脚本编写的对象和嵌入标签。

Java代码

public class MyApplet extends Applet 
{ 
    public Object myScriptAction(String arg1, String arg2) 
    { 
     PrivilegedAction action = new MyAction(); 
     action.setXXXX(); 
     Object o = AccessController.doPrivileged(action); 
     return o; 
    } 

    private class MyAction implements PrivilegedAction 
    { 
     public MyAction() {} 
     ... 
     public Object run() 
     { 
      // Do something here, Runtime.exec() or something else 
      Runtime.getRuntime().exec(cmdarray, envarray, workingDir); 
      return myobj; 
     } 
    } 
} 

HTML使用标签代码中删除

object name="myapplet" classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="1" height="1" 
    param name="name" value="myapplet" 
    param name="code" value="com.example.MyApplet" 
    param name="codebase" value="<c:out value="/path/to/applet/" 
    param name="archive" value="myapplet.jar" 
    param name="scriptable" value="true" 
    param name="mayscript" value="true" 
    comment 
     embed 
      type="application/x-java-applet;version=1.5" 
      code="com.example.MyApplet" 
      java_codebase="/path/to/applet/" 
      archive="myapplet.jar" 
      name="myapplet" 
      width="1" 
      height="1" 
      mayscript="true" 
      scriptable="false" 
      pluginspage="http://java.sun.com/products/plugin/index.html#download" 
      noembed 
        Java not supported. 
      noembed 
     embed 
    comment 
object 

的关键是MAYSCRIPT和脚本化的属性,这些属性允许JavaScript调用的小程序。

然后您使用jarsigner使用您获得的代码签名证书签署myapplet.jar。

请参阅Sun关于混合浏览器Java插件支持的指南。

http://java.sun.com/j2se/1.5.0/docs/guide/plugin/developer_guide/using_tags.html#mixed

+0

我只需要在客户端系统上打开一个文件 – kritya 2011-02-24 13:19:14

+0

打开就像在客户端上读取文件一样?我已经使用上述方法在客户机上启动应用程序。因此,使用这种方法可以打开notepad.exe并为其指定要打开的文件的路径。你可能不得不多说你想要打开什么。 – 2011-02-24 15:40:00

2

我认为你必须在你的网页上部署applet,然后才能从javascript调用它的方法。

所以,首先你需要appelet,即扩展Applet的类。如果你已经有一个,你就完成了。否则,您必须创建一个并公开已有的API。 接下来,您应该在网页上部署小程序。使用标记<applet><object>来执行此操作。这很简单,你可以在互联网上找到很多例子。

现在你必须能够从JavaScript调用这个小程序。它也很简单。例如,如果你的小程序的名字(我的意思是HTML的属性值名字)是MYAPP和小程序有方法foo(),你可以从JavaScript调用它是这样的:myapp.foo()

下面是一个例子:

<applet name="myapp" archive="myjar.jar" code="com.company.MyApplet"/> 
<script> 
    var result = myapp.foo(); 
</script> 
+0

哇,非常感谢。但是,如果我有java文件将其转换为.exe文件,这个scipt可以工作。 – kritya 2011-02-24 12:49:41

+0

@kritya“..但是,如果我有java文件将其转换为.exe文件,可以将此scipt工作。”不,谢天谢地。**默认情况下,Java小程序是沙箱式的,没有任何浏览器制造商的正确思想允许在网页中嵌入'.exe'文件。 – 2011-02-24 13:20:16

+0

这次没有你错了我的意思是说,Java文件是EXE格式,用户已经启动该文件。这可能吗? – kritya 2011-02-24 14:07:52