GWT:调用外部JavaScript库(sjcl)方法

GWT:调用外部JavaScript库(sjcl)方法,javascript,gwt,Javascript,Gwt,我想在GWT项目(客户端)中使用外部加密库。(特别是斯坦福Javascript加密库, 我已经在项目的gwt配置文件(MyProj.gwt.xml)中添加了这些行 但是当我叫它 String result = Security.sha256("password"); 我收到一个错误(“未定义sjcl”) 如果了解这些问题和javasript的人能够阅读该库并告诉我正确的方法,我将节省大量的时间和精力,而无需深入研究可怕的JavaScript UPD: 首先我发现,外部库必须位于/war目录中

我想在GWT项目(客户端)中使用外部加密库。(特别是斯坦福Javascript加密库, 我已经在项目的gwt配置文件(MyProj.gwt.xml)中添加了这些行

但是当我叫它

String result = Security.sha256("password");
我收到一个错误(“未定义sjcl”)

如果了解这些问题和javasript的人能够阅读该库并告诉我正确的方法,我将节省大量的时间和精力,而无需深入研究可怕的JavaScript

UPD:

首先我发现,外部库必须位于/war目录中 其次,如果我只在GWT.xml文件中添加了以下内容,我就无法让GWT导入*.js文件

<script src="libs/sjcl/sjcl.js"></script>
<script src="libs/sjcl/core/sha256.js"></script>

我不得不在入口点的html源代码中添加类似的行

<script src="/sjcl/sjcl.js"></script>
<script src="/sjcl/core/sha256.js"></script>

这样导入工作,我可以检查它与铬检查员

我试着使用另一个库,没有sjcl那么复杂,它工作得很好。 显然,我没有正确使用sjcl。 另一个库更简单,只是纯方法,sjcl使用类和其他东西,但由于我对JS一无所知,如果不深入研究JS语法,我就无法正确地调用这些东西。我真的想跳过这一部分

有人能看看sjcl代码并告诉我如何正确调用该方法吗?我认为源代码非常小,JS pro可以一眼就搞定

UPD 2: 事实证明,将以下代码添加到gwt.xml就足够了,只需将library放在/war中,并注意路径中前面的“/”。如果不放在那里,gwt将在module目录中查找lib

UPD 3: 不要忘记清除浏览器的缓存,否则“找不到”错误不会消失。

“sjcl未定义”意味着您没有正确导入sjcl文件。
检查文件路径并确保浏览器可以访问该文件。

在全局上下文中谈论对象时,请确保在对象前面加上
$wnd
,这意味着运行应用程序的主
窗口
实例。这在JSNI文档中有说明,请参阅


Larry,我检查了路径并将其更改为完整路径(如d:\…\sjcl.js),但错误仍然发生Colin,谢谢!添加了$wnd.,该错误消失,但现在又出现了另一个错误:幸运的是,或者不幸的是,这意味着主窗口上下文中没有名为
sjcl
的对象。请确保已加载这些脚本标记(firebug,chrome inspector),并确保在GWT/Java中实现之前,您正在尝试构建的一些简单的基于js的版本能够正常工作。谢谢!随着问题变得更加清晰,编辑了这个问题。您能看一下吗?
<script src="libs/sjcl/sjcl.js"></script>
<script src="libs/sjcl/core/sha256.js"></script>
<script src="/sjcl/sjcl.js"></script>
<script src="/sjcl/core/sha256.js"></script>
public static native String sha256(String ptext)
  /*-{
      return $wnd.sjcl.hash.sha256.hash(ptext);
  }-*/;