2017-07-28
Java调用javascript
package co。test;
import java。io。FileReader;
import java。io。LineNumberReader;
import org。mozilla。 javascript。Context;
import org。mozilla。javascript。Function;
import org。mozilla。javascript。Scriptable;
public class JSExploration
{
private Context cx;
private Scriptable scope;
public JSExploration()
...全部
package co。test;
import java。io。FileReader;
import java。io。LineNumberReader;
import org。mozilla。
javascript。Context;
import org。mozilla。javascript。Function;
import org。mozilla。javascript。Scriptable;
public class JSExploration
{
private Context cx;
private Scriptable scope;
public JSExploration()
{
this。
cx = Context。enter();
this。scope = cx。initStandardObjects();
}
public Object runJavaScript(String filename)
{
String jsContent = this。
getJsContent(filename);
Object result = cx。evaluateString(scope, jsContent, filename, 1, null);
return result;
}
private String getJsContent(String filename)
{
LineNumberReader reader;
try
{
reader = new LineNumberReader(new FileReader(filename));
String s = null;
StringBuffer sb = new StringBuffer();
while ((s = reader。
readLine()) != null)
{
sb。append(s)。append("\n");
}
return sb。toString();
}
catch (Exception e)
{
// TODO Auto-generated catch block
e。
printStackTrace();
return null;
}
}
public Scriptable getScope()
{
return scope;
}
public static void main(String[] args)
{
String filename = System。
getProperty("user。dir") + "/jsmap。js";
JSExploration jsExploration = new JSExploration();
Object result = jsExploration。
runJavaScript(filename);
Scriptable scope = jsExploration。getScope();
Function sum = (Function) scope。
get("sum", scope);
Function isPrime = (Function)sum。call(Context。getCurrentContext(), scope, sum, new Object[] {2,8});
Object ss = isPrime。
call(Context。getCurrentContext(), sum, isPrime, new Object[] {2,8});
System。out。println(Context。
toString(ss));
}
}
试验了一个java 调用 javascript 的例子,如果把jsmap。js中的与this 有关的代码注销的话程序就可以正常运行。不住销掉的话就会报个运行时错误。
。。
js 代码如下(有关this 的代码已注销):
function
sum(x, y) {
// this。formulaeObject = null;
// this。
formulaeObject["vager"] = function (c, d) {
// return (c + d)/2;
// };
var vager = 1000;
return function (x,y){return x + y + vager;} ;
}
编辑特别推荐:
Java处理带BOM的文本
几个主流的Java连接池
java内省机制。收起