2016-10-24 38 views
2

JavaコードからJavascriptを呼び出すためにRihnoライブラリを使用しようとしています。しかし、それは私の単純なJSファイルがRihnoでJSを呼び出すJava(Uint8Arrayが定義されていません)

function decrypt(version, iv, encryptedBuffer) { 
    var output8; 
    output8 = new Uint8Array(encryptedBuffer); 
    var outputBuffer = output8.buffer; 
    var output32 = new Int32Array(outputBuffer); 
    ... more funny code 
} 

であることがここに型指定された配列を上のくさびで止めるようです。しかし

jsFunction.call(rhino, scope, scope, params); 

を呼び出すときに、私はこの

sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "Uint8Array" is not defined. (JavaScript#5680)

を取得することに設定するには、余分なものはあります私の小さなjsのスニペットを実行してもらえますか?

+0

Rhinoのバージョンでは、型付き配列がサポートされていますか? *編集* Rhino 1.8以降でのみサポートされていると思います。 – Pointy

+0

私はバージョン1.7.7.1を使用しています。これは、変更ログでtypedArrayがサポートされていると言います。多分Java 8が必要でしょうか?今すぐ試してみよう – Johny19

+0

JVM用の新しいJavaScriptランタイムであるNashornを搭載したJava 8がうまくいきます。私はすばやく検索し、[トピックに関するバグ](https://github.com/mozilla/rhino/issues/151)を見つけました。 – Pointy

答えて

0

は、パッケージorg.mozilla.javascript.typedarraysからクラスを使用してみてください:

importPackage(org.mozilla.javascript.typedarrays); 

var decrypt = function(version, iv, encryptedBuffer, off, len) { 
    var output8 = new NativeUint8Array(encryptedBuffer,off,len); 
    var outputBuffer = output8.buffer; 
    var output32 = new NativeInt32Array(outputBuffer,off,len); 
    //... more funny code 
} 

var encryptedBuffer = new NativeArrayBuffer(1024); 
decrypt(null,null,encryptedBuffer,0,1024); 
0

あなたはsetLanguageVersion(Context.VERSION_ES6)を設定することがありますか? 型付き配列は、新しいJavascript機能です。 Rhinoでは、古いjsバージョンでTyped配列呼び出しを使用できません。