【问题标题】:.Jar file in JS.Jar 文件在 JS
【发布时间】:2011-05-06 07:13:17
【问题描述】:

有没有人知道如何在 JS 中访问 .jar 文件。我在 Java 中创建了类并作为 jar 文件导入,我想从 JS 文件中访问该类。

“嗨,伙计们,我感谢你们所有人。我尝试在 Firefox XUL 中使用 JS 列出文件夹中的文件,但我不能,然后我决定在 JS 中使用 JAVA。如果我发现我会很高兴在 JS 中使用 JS 或 Java 来列出文件夹文件的一个示例。”

谢谢你们。

卡提克

我的一位导师已经完成了,这是代码,但我无法理解!我确定他从所有 JS 和 XUL 文件所在的同一个项目文件夹中调用了 jar 文件。

// This function will be called to give the necessary privileges to your JAR files

function policyAdd (loader, urls) {
    //alert("debut charge java");
    try {
        //If have trouble with the policy try changing it to 
        //edu.mit.simile.javaFirefoxExtensionUtils.URLSetPolicy        
        var str = 'edu.mit.simile.javaFirefoxExtensionUtils.URLSetPolicy';
        var policyClass = java.lang.Class.forName(
               str,
               true,
               loader
        );
        var policy = policyClass.newInstance();
        policy.setOuterPolicy(java.security.Policy.getPolicy());
        java.security.Policy.setPolicy(policy);
        policy.addPermission(new java.security.AllPermission());
        for (var j=0; j < urls.length; j++) {
            policy.addURL(urls[j]);
        }
    }catch(e) {
       alert(e+'::'+e.lineNumber);
    }
}

//Get extension folder installation path...
var extensionPath = Components.classes["@mozilla.org/extensions/manager;1"].
            getService(Components.interfaces.nsIExtensionManager).
            getInstallLocation("pde@ghorbel.com"). // guid of extension
            getItemLocation("pde@ghorbel.com");

// Get path to the JAR files (the following assumes your JARs are within a
// directory called "java" at the root of your extension's folder hierarchy)
// You must add this utilities (classloader) JAR to give your extension full privileges
var classLoaderJarpath = "file:///" + extensionPath.path.replace(/\\/g,"/") + "/java/javaFirefoxExtensionUtils.jar";
// Add the paths for all the other JAR files that you will be using
var myJarpath = "file:///" + extensionPath.path.replace(/\\/g,"/") +
"/java/encryption.jar"; // seems you don't actually have to replace the backslashes as they work as well

var urlArray = []; // Build a regular JavaScript array (LiveConnect will auto-convert to a Java array)
urlArray[0] = new java.net.URL(myJarpath);
urlArray[1] = new java.net.URL(classLoaderJarpath);
var cl = java.net.URLClassLoader.newInstance(urlArray);

//Set security policies using the above policyAdd() function
policyAdd(cl, urlArray);

/*


//loading Encryption Class
var myClass = cl.loadClass('Encryption'); // use the same loader from above
var encryptionObj = myClass.newInstance();
//var res = encryptionObj.encrypt("test message to crypt"); // Pass whatever arguments you need (they'll be auto-converted to Java form, taking into account the LiveConnect conversion rules)

*/

【问题讨论】:

  • “javascript”中的“java”与“java”中的“java”无关。即这不能完成
  • @ampersand - 在某些情况下,它可以。
  • @Stephen,来自 OP 的单行代码,我的印象是他想在使用类定义实例的正常意义上使用它。当然,OP 现在已经为他的单线提供了更多的上下文,所以我的 cmets 变得无关紧要了。

标签: java javascript jar


【解决方案1】:

抱歉,目前还没有开发出这样的功能,所以您无法在 javascript 中访问 jar 文件。

您可以做的是在 javascript 中触发 AJAX 请求,并在 servlet 中使用该 jar 进行处理并返回所需的结果,并且该结果可以在 javascript 中访问。


编辑

在 servlet 中:

File file = new File("/folderName");
File[] files;
if(file.isDirectory()){
    files = file.listFiles();
    for(File fl : files){
        out.print(fl.getName()+",");
}

在javascript中:

var xmlhttp;
if (window.XMLHttpRequest) {
    xmlhttp = new XMLHttpRequest();
} else {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("POST", urlToServlet, false);
xmlhttp.send(null);

现在在 xmlhttp.responseText 的 js 中,您将获得文件夹中的文件列表。您可以根据需要对其进行解析并显示列表。

【讨论】:

  • 谢谢哈利。你知道我正在开发 Firefox XUL 扩展,我必须使用 JS 和 Java。事实上,我想使用 JS 列出文件夹中的文件,但我不能,然后我决定用 java 来做。现在正如我之前所说,我必须将 .jar 文件与 JS 链接。
  • @katthikin:我认为这应该适用于 FF,因为我已经在我的一些项目中使用了它。
  • 哦,太好了。那么您能否给我一些更详细的信息,说明您如何链接所有这些文件。
  • @Karthikin:链接文件是什么意思?制作一个下载文件的链接?
  • 我的意思是,我需要在您的代码中提供一些更详细的信息!我必须创建一个 servlet 文件并与 JS 链接吗?我说的对吗?
【解决方案2】:

我认为您需要查看 LiveConnect,它允许 Javascript 在 Web 浏览器中调用 Java,反之亦然。

参考资料:


这是否允许你做你想做的事(访问用户机器上的文件系统)是另一个问题。这将取决于 Java 是否作为签名的 JAR 分发......并且用户/浏览器是否接受签名。如果 JAR 未签名,则 Java 代码将被视为不受信任的代码,并在(默认情况下)阻止其访问本地文件系统的沙箱中执行。

【讨论】:

  • 大家好,我感谢你们所有人。我试图在 Firefox XUL 中使用 JS 列出文件夹中的文件,但我不能,然后我决定在 JS 中使用 JAVA。如果我在 JS 中找到一个使用 JS 或 Java 的示例来列出文件夹文件,我会很高兴。
【解决方案3】:

创建一个受信任的小程序以使用现有的罐子。 JavaScript 可以与 Java 小程序进行通信(从/发送 dato 获取数据)。

【讨论】:

    【解决方案4】:

    如果您将一个小程序添加到您的页面,并且不需要任何 UI 方面,那么您可以通过 DOM 获取该小程序。一旦你有了它,你就可以在它上面调用方法,所以把你的 api 放在 applet 类中,为提供你想要的功能的对象提供一个 getter 并调用它。

    【讨论】:

    • 大家好,我感谢你们所有人。我试图在 Firefox XUL 中使用 JS 列出文件夹中的文件,但我不能,然后我决定在 JS 中使用 JAVA。如果我在 JS 中找到一个使用 JS 或 Java 的示例来列出文件夹文件,我会很高兴。
    • 如果您尝试使用小程序执行此操作,则需要对其进行签名并且用户必须接受它才能允许访问文件系统。我没有用 xul 做太多事情,但我认为不必求助于小程序就可以在文件系统中获取一些东西。
    猜你喜欢
    • 2016-04-08
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    相关资源
    最近更新 更多