【问题标题】:Java calling JS with Rhino (Uint8Array is not defined)Java 用 Rhino 调用 JS(未定义 Uint8Array)
【发布时间】:2017-03-06 06:41:00
【问题描述】:

我正在尝试使用 Rhino 库从 java 代码中调用一些 javascript。但它似乎在一个类型化的数组上窒息。这是我的简单js文件

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”。 (JavaScript#5680)

有什么额外的配置可以让我的小 js sn-p 运行吗?

【问题讨论】:

  • 您确定您的 Rhino 版本支持类型化数组吗? edit 我认为它们仅在 Rhino 1.8 或更高版本中受支持。
  • 我使用的是 1.7.7.1 版本,在更改日志中显示支持 typedArray。我可能需要java 8吗?我现在试试
  • Java 8 附带 Nashorn,这是 JVM 的新 JavaScript 运行时。我只是快速搜索了一下,发现a bug on the topic
  • 我正在从 Android 拨打这个电话,所以我不能使用 nashorn。无论哪种方式,我只是尝试使用 java 1.8 运行我的原始代码,但我仍然遇到相同的错误(要清楚,我正在普通 Java(不是来自 android)上测试这个,所以我在使用它之前 100% 一切都在工作安卓)
  • JS代码怎么调用?你使用 rhino 原生类还是 jdk API。你能发布你的java代码吗?

标签: javascript java arrays call rhino


【解决方案1】:

你设置了 setLanguageVersion(Context.VERSION_ES6) 吗? 类型化数组是新的 Javascript 功能。 Rhino 不允许在旧 js 版本中调用 Typed 数组。

【讨论】:

    【解决方案2】:

    尝试使用包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);
    

    【讨论】:

      猜你喜欢
      • 2011-04-29
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2019-06-11
      相关资源
      最近更新 更多