2

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が定義されていません」)

これらの問題と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>

このようにインポートが機能するので、ChromeInspectorで確認できます

sjclほど複雑ではない別のライブラリを使用しようとしましたが、正常に機能しました。したがって、明らかに、私はsjclを正しく使用していません。別のライブラリはより単純で、純粋なメソッドであり、sjclはクラスなどを使用しますが、JSをまったく知らないため、JS構文を掘り下げずにそのようなものを適切に呼び出す方法を理解することはできません。私は本当にこの部分をスキップしたいと思います。

誰かがsjclコードを調べて、メソッドを正しく呼び出す方法を教えてもらえますか?ソースは本当に小さく、JSプロは一目でそれを理解できると思います。

UPD 2:次のコードをgwt.xmlに追加するだけで十分であることが判明しました。ライブラリを/ warに配置し、パスの前の「/」に注意してください。そこに配置しない場合、GWTはモジュールディレクトリでlibを探します

UPD 3:ブラウザのキャッシュをクリアすることを忘れないでください。そうしないと、「見つかりません」エラーが消えません。

4

2 に答える 2

3

グローバル コンテキストでオブジェクトについて話すときは、アプリが実行されて$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-20T04:09:52.453 に答える
0

「sjcl is not defined」は、sjcl ファイルを正しくインポートしなかったことを意味します。ファイル パスを確認し、ブラウザがファイルにアクセスできることを確認します。

于 2012-04-20T03:20:17.583 に答える