浏览 603 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2007-11-01
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;} ; } 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |


