Rhino打印功能

Rhino print function

本文关键字:功能 打印 Rhino      更新时间:2023-09-26

我使用Rhino 1.7R4和env.js 1.2在Java 中运行Javascript代码

我想从我的Javascript代码中打印一个字符串到Java控制台。

根据:http://evilroundabout.blogspot.com.au/2009/11/javascript-printing-rhino.html

我应该使用:印刷品("你好世界");

但当我这样做的时候,我会得到:

org.mozilla.javascript.EcmaError: ReferenceError: "print" is not defined. (svg-renderer-highcharts-2.1.4.js#20)
at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3687)
at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3665)
at org.mozilla.javascript.ScriptRuntime.notFoundError(ScriptRuntime.java:3750)
at org.mozilla.javascript.ScriptRuntime.nameOrFunction(ScriptRuntime.java:1794)
at org.mozilla.javascript.ScriptRuntime.getNameFunctionAndThis(ScriptRuntime.java:2188)
at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1308)
at script.renderSVGFromObject(svg-renderer-highcharts-2.1.4.js:20)

如果我使用document.write,我看不到任何输出。

我认为这在嵌入式模式下不起作用,我认为这只会在Rhino控制台中起作用。

您可以使用java.lang.system.out.println

java.lang.System.out.println("HELLO")

您可以很容易地使用rhino shell使用的相同作用域。犀牛壳依赖于一个名为Global的特殊构造的作用域实例,该实例定义了几个函数,如"print"。下面的示例演示了如何使用Global和"print"函数。这将在stdout中打印两次"Hello World!"。

import org.mozilla.javascript.Context;
import org.mozilla.javascript.tools.shell.Global;
/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
        Context cx = Context.enter();
        Global global = new Global(cx);
        cx.evaluateString(global, "print('Hello World!')", 
                "helloWorld.js", 1, null);
        Context.exit();
    }
}

我在挖掘Rhino shell可执行文件后通过实验发现了这一点。

为了完整起见,以下是global定义的其他全局函数:

"defineClass",
"deserialize",
"doctest",
"gc",
"help",
"load",
"loadClass",
"print",
"quit",
"readFile",
"readUrl",
"runCommand",
"seal",
"serialize",
"spawn",
"sync",
"toint32",
"version"

您可以创建自己的:

function print() {
    for( var i = 0; i < arguments.length; i++ ) {
       var value = arguments[i];
       java.lang.System.out.print( value );
    }
    java.lang.System.out.println();
}
function printf( format ) {
    java.lang.System.out.printf( format, Array.prototype.slice.call(arguments) );
}

截至2014年1月,上的方法和属性列表

new org.mozilla.javascript.tools.shell.Global( org.mozilla.javascript.Context.enter() )

看起来如下:

defineClass
deserialize
doctest
gc
getConsole
getErr
getIn
getOut
getPrompts
help
init
init
initQuitAction
installRequire
isInitialized
load
loadClass
pipe
print
quit
readFile
readUrl
runCommand
runDoctest
seal
serialize
setErr
setIn
setOut
setSealedStdLib
spawn
sync
toint32
version