我想在我的GWT项目中使用外部加密库(客户端)。(特别是,Stanford Javascript Crypto Library,http://crypto.stanford.edu/sjcl/我已经在我的项目的gwt配置文件(MyProj.gwt.xml)中添加了这些行)
<script src="libs/sjcl/sjcl.js" />
<script src="libs/sjcl/core/sha256.js" />并在我的安全类中创建了一个新方法:
public static native String sha256(String ptext)
/*-{
return sjcl.hash.sha256.hash(ptext);
}-*/;但当我调用它时
String result = Security.sha256("password");我得到一个错误("sjcl is not defined")
如果知道这些问题和javasript的人能够阅读这个库并告诉我正确的方法,我将节省大量的时间和精力--不用再去钻研可怕的JavaScript了。
更新:
首先,我发现外部库必须在/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>这样导入工作,我可以用Chrome Inspector检查它
我尝试使用另一个库,不像sjcl那么复杂,它工作得很好。所以,很明显,我没有正确使用sjcl。另一个库更简单,只是纯方法,sjcl使用类之类的东西,但由于我根本不了解JS,所以如果不深入JS语法,我就不知道如何正确地调用这些东西。我真的很想跳过这一部分。
有人可以查看sjcl代码并告诉我如何正确调用该方法吗?源代码真的很小,JS pro可以一目了然,我想。
更新2:事实证明,将以下代码添加到gwt.xml中就足够了,只需将库放在/war中,并注意路径中前面的"/“。如果您不把它放在那里,GWT将在模块目录中为您查找lib
更新3:别忘了清除浏览器的缓存,否则“找不到”错误就不会消失
发布于 2012-04-20 12:09:52
确保在讨论全局上下文中的对象时,使用$wnd作为它们的前缀,这意味着应用程序在其中运行的主window实例。JSNI文档中记录了这一点,请参阅https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI#writing。
public static native String sha256(String ptext)
/*-{
return $wnd.sjcl.hash.sha256.hash(ptext);
}-*/;发布于 2012-04-20 11:20:18
"sjcl is not defined“表示您没有正确导入sjcl文件。检查文件路径并确保浏览器可以访问该文件。
https://stackoverflow.com/questions/10239732
复制相似问题