我正在运行OSX 10.6 Snow Leopard,已下载rhino1_7R2并将其移至/ usr/local /
但我知道(虽然这会阻止它被操作系统更新改变)这可能不是它的最佳位置,并想象它可能需要连接到Java安装.
我对Rhino的用途是从终端命令行运行JavaScript,我正在寻求帮助,因为我相信我缺乏Java知识来快速解决这个问题.
我将不胜感激任何帮助或建议链接,
谢谢保罗
哪个版本的ECMAScript标准可以支持Java的JavaScript引擎Rhino,修复错误需要做多少工作,并使实现与最新的标准化版本保持同步?
我遇到了 Rhino在通过javax.script.ScriptEngine
API 运行Rhino时抛出"编译脚本时遇到的代码生成错误:方法生成的字节码超过64K限制"异常的问题.接受的解决方案似乎是要调用setOptimizationLevel(-1)
的sun.org.mozilla.javascript.Context
.
不幸的是,我似乎无法访问由Context
该创建的ContextFactory
.我曾尝试加入ContextFactory.Listener
到ContextFactory.getGlobal()
将修改Context
创建之后,但我的听众似乎永远不会被调用.我还看了一下来自Java 6的RhinoScriptEngine源,看看是否有一个我可以设置的属性,ContextFactory
以便确定优化级别的值.
据我所知,在Java 7中,RhinoScriptEngine
设置优化级别-1
默认,并能够通过设置的优化级别rhino.opt.level
属性.比较makeContext()
方法在Java 7的版本与makeContext()
在方法的Java 6版本,看看我的意思.
据我所知,我认为我最好的选择是直接运行Rhino,如使用Rhino运行CoffeeScript编译器的示例所示.虽然你可以看到,代码很麻烦,所以javax.script.ScriptEngine
如果可能的话,我宁愿使用API,同时继续支持Java 6.还有其他选择吗?
我需要以某种方式深度克隆我的ScriptEngine对象的整个绑定集.
到目前为止,我已经尝试过Cloner库来克隆整个Bindings结构.如果它有用,那将是很好的,因为它可以确保精确的副本,包括私有变量.但这会导致jvm堆损坏(jvm只是崩溃,退出代码为-1073740940).有时它不会崩溃,但会发生奇怪的事情,比如System.out.println()
停止工作应该......
我还研究了使用ScriptEngine中的js代码克隆对象,这样我就可以将它们作为NativeObjects获取并在一些java地图中管理它们.但是我发现的所有克隆方法都存在缺陷.我想要一个精确的对象快照.例如,如果每两个对象A和B的包含字段(比如a.fa和b.fb),其引用相同的对象C,使用克隆时jQuery.extend()
(例如)的字段a.fa
和b.fb
克隆的a和b的将引用的不同的克隆c,而不是引用一个相同的克隆.还有许多其他边缘问题.
我还尝试使用Cloner克隆整个ScriptEngine(不仅仅是绑定),我还尝试使用Rhino的js引擎并克隆整个范围(而不是Bundeled ScriptEngine包装器).但堆腐败问题仍然存在.
我需要这个,因为我必须能够将整个ScriptEngine绑定的值恢复到之前的某个点.我需要制作绑定的精确快照.
该应用程序是我的博士研究项目的一部分,该项目包括运行状态机和节点(在java中实现),其中附带了js代码.js代码由最终用户输入,并且在运行时被逐出.当无法通过路径到达最终状态时,算法会向后退步,尝试查找备用路径.在每个步骤向后,它必须撤消js引擎绑定中可能发生的任何更改.
所有全局变量名称在js evaling之前都是已知的,并且是对象(用户在节点的代码中键入,然后将其组织(在java中)到具有某些名称模式的js对象中).但是他们的内容可以是任何东西,因为它是由用户js代码控制的.
所以我想我现在唯一的解决方法是使用js代码克隆js对象.
我正在尝试使用Mozilla/Rhino js引擎在命令行中测试一些SOAP请求.但是,用于发出请求的正常对象(XMLHttpRequest,HttpRequest)似乎都不可用.为什么是这样?我可以导入库吗?
我试图在JavaScript代码中生成数据结构,并处理来自Java(Java 6或7中的Rhino)的结果.
我成功地使用Java从Java调用JS函数:
Object result = invocableEngine.invokeFunction(functionName, parameters);
Run Code Online (Sandbox Code Playgroud)
现在,在JS方面,该结果是一个JSON数据结构,如下所示:
{
"key1" : { "key1_1" : "value1_1", "key1_2" : 11 },
"key2" : [ { "key2_1": "foo2"
, "key2_1" : "bar2" },
{ "key2_1": "foo2"
, "key2_1" : "bar2"
, "key2_3" : [1,2,3] } ]
}
Run Code Online (Sandbox Code Playgroud)
然而,在Java方面,"result"是类型的对象 sun.org.mozilla.javascript.internal.NativeObject
有没有办法让我将它转换为合理的Java数据结构,而没有将JSON序列化为字符串然后使用Gson解析它的开销?
假设目前数据结构被合理地定义,例如,我知道对象是具有键"key1"和"key2"的散列,第一个映射到具有键"key1_1"和"key1_2"的散列; 第二个映射到散列数组,每个散列都有标量键"key2_1"和"key2_2"以及数组"key2_3".
我的两个优先事项是:
我试图从Android设备控制Play/Pause html DOM元素(在PC中打开的浏览器中).
在html页面(在谷歌Chrome浏览器中)有一个<video>
标签,所以我可以像这样控制它:
//js code
document.querySelector("video").play();
document.querySelector("video").pause();
Run Code Online (Sandbox Code Playgroud)
但我希望从Android设备运行,所以我使用GCM.
我在这里阅读并获得了一些见解,但我仍然有一些问题.
首先,由于我在eclipse中编写,并且它没有看到document
变量,因此会产生错误.那么eclipse如何element
在html页面中识别出来,以便我可以在设备上编译和安装apk?
我在哪里指定要与之通信的页面网址?(发送播放/暂停命令)
要在java中运行js,我正在使用Rhino.我查看了文档中的示例,但我仍然不确定注释是否足以声明js函数.@JSFunction
这是我的代码:
import com.alaa.chromote.util.SystemUiHider;
import com.google.android.gcm.GCMRegistrar;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;
import android.view.View.OnClickListener;
import org.mozilla.javascript.*;
import org.mozilla.javascript.annotations.*;
public class MainApplication extends Activity {
private final static String GCM_SENDER_ID = "484514826047";
private static final String LOG_TAG = "GetAClue::GCMIntentService";
private …
Run Code Online (Sandbox Code Playgroud) 如何在浏览器中确定javascript引擎有几个问题.我必须编写必须在rhino和nashorn上运行的javascript代码.
如何确定我的代码是在rhino还是nashorn上运行?是否存在可以确定引擎的典型函数,变量,常量?
我正在尝试编译JasperDesign以编程方式创建报告.由于我需要在Javascript中包含条件样式,因此我相应地设置了JasperDesign语言:
val jasperDesign = new JasperDesign
jasperDesign.setLanguage("javascript")
Run Code Online (Sandbox Code Playgroud)
请注意,我在Java 8上使用Scala 2.11,在Play for Scala 2.5上运行
由于JasperReports 6.4.3(我正在使用的版本)依赖于rhino 1.7.6,我将它添加到类路径中:
libraryDependencies += "org.mozilla" % "rhino" % "1.7.6"
Run Code Online (Sandbox Code Playgroud)
问题是每当我编译JasperDesign时,我都会遇到异常.即使我不包含Javascript条件样式,也会发生这种情况:
java.lang.NoSuchMethodError:org.mozilla.javascript.ContextFactory.enterContext()Lorg/mozilla/javascript/Context; at net.sf.jasperreports.compilers.JavaScriptClassCompiler.compileUnits(JavaScriptClassCompiler.java:124)at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:203)at net.sf.jasperreports.engine.JasperCompileManager .compile(JasperCompileManager.java:357)at net.sf.jasperreports.engine.JasperCompileManager.compileToStream(JasperCompileManager.java:326)at net.sf.jasperreports.engine.JasperCompileManager.compileReportToStream(JasperCompileManager.java:599)
如果我删除jasperDesign.setLanguage("javascript")
我没有编译错误.这里缺少什么?Nashorn和Rhino之间是否存在冲突?
我正在尝试创建一种动态方式来在 Three.js 中的 gltf 导入模型上显示太阳能数据。目的是将不同的纯色与模型的不同部分相关联,并能够关闭和打开这些部分。我目前的障碍是更改 gltf 中材料的颜色。
我曾尝试使用 ObjLoader 来代替我输入自己的材料,但这不起作用:/
这是我目前拥有的js:
const gltfLoader = new THREE.GLTFLoader();
gltfLoader.load('Building.glb', (gltf) => {
const root = gltf.scene;
scene.add(root);
const box = new THREE.Box3().setFromObject(root);
const boxSize = box.getSize(new THREE.Vector3()).length();
const boxCenter = box.getCenter(new THREE.Vector3());
frameArea(boxSize * 0.5, boxSize, boxCenter, camera);
controls.maxDistance = boxSize * 10;
controls.target.copy(boxCenter);
controls.update();
});
function frameArea(sizeToFitOnScreen, boxSize, boxCenter, camera) {
const halfSizeToFitOnScreen = sizeToFitOnScreen * 0.5;
const halfFovY = THREE.Math.degToRad(camera.fov * .5);
const distance = halfSizeToFitOnScreen / Math.tan(halfFovY);
const direction …
Run Code Online (Sandbox Code Playgroud) rhino ×10
java ×6
javascript ×5
android ×1
clone ×1
gltf ×1
grasshopper ×1
json ×1
macos ×1
nashorn ×1
scriptengine ×1
three.js ×1