如何在java中呼叫js方法

yangxi_001發表於2013-11-19

有時候因為需要,我們想在java中呼叫js方法,不再是像頁面中一個事件觸發,該如何做到呢?今天下午沒事得時候小研究了下,現跟大家分享一下。不對之處,望大家指正,共同進步!

   

[java] view plaincopy
  1. /* 
  2.  * 載入指令碼引擎,並在java中呼叫js方法 
  3.  */  
  4. public void test2()  
  5. {  
  6.      ScriptEngineManager manager = new ScriptEngineManager();  
  7.   
  8.      ScriptEngine engine = manager.getEngineByName("javascript");  
  9.      try {  
  10.          String str="2&1";  
  11.          Double d = (Double) engine.eval(str);  
  12.          Integer i=d.intValue();  
  13.          System.out.println(i);  
  14.      } catch (ScriptException ex) {  
  15.         ex.printStackTrace();  
  16.      }  
  17.   
  18. }  

   

[java] view plaincopy
  1. /* 
  2.  * 在java中呼叫js,jdk1.6中有載入js引擎類,然後由它來呼叫js方法。 
  3.  * 並通過JDK平臺給script的方法中的形參賦值   
  4.  */  
  5. public void test(String name)  
  6. {  
  7.     ScriptEngineManager sem = new ScriptEngineManager();   
  8.     /* 
  9.      *sem.getEngineByExtension(String extension)引數為js    
  10.       sem.getEngineByMimeType(String mimeType) 引數為application/javascript 或者text/javascript    
  11.       sem.getEngineByName(String shortName)引數為js或javascript或JavaScript  
  12.      */  
  13.     ScriptEngine se = sem.getEngineByName("js");   
  14.     try   
  15.     {   
  16.       String script = "function say(){ return 'hello,'"+name+"; }";  
  17.       se.eval(script);   
  18.       Invocable inv2 = (Invocable) se;   
  19.       String res=(String)inv2.invokeFunction("say",name);   
  20.       System.out.println(res);  
  21.     }   
  22.     catch(Exception e)   
  23.     {   
  24.         e.printStackTrace();  
  25.     }   
  26.   
  27. }  

   

[java] view plaincopy
  1. /* 
  2.  * 演示如何將java中物件作為js中全域性變數,同時演示將file類賦給指令碼語言,並獲得其屬性。 
  3.  */  
  4. public void testScriptVariables()  
  5. {  
  6.     ScriptEngineManager sem=new ScriptEngineManager();  
  7.     ScriptEngine engine=sem.getEngineByName("js");  
  8.     File file=new File("c://1.txt");  
  9.     engine.put("f", file);  
  10.     try {  
  11.         engine.eval("println('path:'+f.getPath())");//無法使用alert方法  
  12.     } catch (ScriptException e) {  
  13.         e.printStackTrace();  
  14.     }  
  15.       
  16. }  

   

[java] view plaincopy
  1. /* 
  2.  * 演示如何在java中如何通過執行緒來啟動一個js方法 
  3.  */  
  4. public void testScriptInterface() throws ScriptException  
  5. {  
  6.     ScriptEngineManager sem=new ScriptEngineManager();  
  7.     ScriptEngine engine=sem.getEngineByName("js");  
  8.     String script="var obj=new Object();obj.run=function(){println('test thread')}";  
  9.     engine.eval(script);  
  10.     Object obj=engine.get("obj");//獲取js中物件  
  11.     Invocable inv=(Invocable)engine;  
  12.     Runnable r=inv.getInterface(obj,Runnable.class);  
  13.     Thread t=new Thread(r);  
  14.     t.start();  
  15.       
  16. }  

 

這樣java就可以執行動態語言了,不過注意是jdk1.6版本的哦~

相關文章