论坛首页 AJAX版 AJAX

java调用javascript .

浏览 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;} ;
}
   
论坛首页 AJAX版 AJAX

跳转论坛:
JavaEye推荐