引入
rhino-1.7.8.jar
rhino-android-1.5-sources.jar
1 package com.vine.util; 2 3 import org.mozilla.javascript.Context; 4 import org.mozilla.javascript.Function; 5 import org.mozilla.javascript.NativeJavaObject; 6 import org.mozilla.javascript.NativeObject; 7 import org.mozilla.javascript.Scriptable; 8 9 10 /** 11 * Created by vine on 2018/1/29. 12 */ 13 14 public class JsUtils { 15 public static String runScript(android.content.Context ctx,String js,String functionName,Object[] functionParams){ 16 Context rhino = Context.enter(); 17 rhino.setOptimizationLevel(-1); 18 19 try { 20 Scriptable scope = rhino.initStandardObjects(); 21 // Scriptable scope = new ImporterTopLevel(rhino); 22 rhino.evaluateString(scope, js, "MainActivity", 1, null); 23 Function function = (Function) scope.get(functionName, scope); 24 Object result = function.call(rhino, scope, scope, functionParams); 25 if (result instanceof String) { 26 return (String) result; 27 } else if (result instanceof NativeJavaObject) { 28 return (String) ((NativeJavaObject) result).getDefaultValue(String.class); 29 } else if (result instanceof NativeObject) { 30 return (String) ((NativeObject) result).getDefaultValue(String.class); 31 } 32 return result.toString(); 33 }finally { 34 Context.exit(); 35 } 36 } 37 }
使用
注意:WXFileUtils、WXEnvironment 为weex开发环境中的文件
1 String jsCode = WXFileUtils.loadAsset("script/aes.js", WXEnvironment.getApplication()); 2 Object[] params = new Object[3]; 3 params[0] = new String(aeskey); 4 params[1] = new String("加密前的字符串"); 5 String ret = JsUtils.runScript(WXEnvironment.getApplication(),jsCode,"aesEncrypt",params);