源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

使用Rhino让java执行javascript的方法实例

  • 时间:2021-05-04 06:24 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:使用Rhino让java执行javascript的方法实例
[b]下载Rhino[/b] [url=https://developer.mozilla.org/en-US/docs/Rhino]https://developer.mozilla.org/en-US/docs/Rhino[/url] [b]把js.jar拷贝到项目工程[/b] 实现从Java中执行js中的函数、从js中调用Java中的方法,代码:
[u]复制代码[/u] 代码如下:
public class MainActivity extends Activity {     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         TextView text1 = (TextView) findViewById(android.R.id.text1);         TextView text2 = (TextView) findViewById(android.R.id.text2);         text1.setText(runScript(JAVA_CALL_JS_FUNCTION, "Test", new String[] {}));         text2.setText(runScript(JS_CALL_JAVA_FUNCTION, "Test", new String[] {}));     }     /** Java执行js的方法 */     private static final String JAVA_CALL_JS_FUNCTION = "function Test(){ return '农民伯伯 java call js Rhino'; }";     /** js调用Java中的方法 */     private static final String JS_CALL_JAVA_FUNCTION = //     "var ScriptAPI = java.lang.Class.forName(\"" + MainActivity.class.getName() + "\", true, javaLoader);" + //         "var methodRead = ScriptAPI.getMethod(\"jsCallJava\", [java.lang.String]);" + //         "function jsCallJava(url) {return methodRead.invoke(null, url);}" + //         "function Test(){ return jsCallJava(); }";     /**      * 执行JS      *      * @param js js代码      * @param functionName js方法名称      * @param functionParams js方法参数      * @return      */     public String runScript(String js, String functionName, Object[] functionParams) {         Context rhino = Context.enter();         rhino.setOptimizationLevel(-1);         try {             Scriptable scope = rhino.initStandardObjects();             ScriptableObject.putProperty(scope, "javaContext", Context.javaToJS(MainActivity.this, scope));             ScriptableObject.putProperty(scope, "javaLoader", Context.javaToJS(MainActivity.class.getClassLoader(), scope));             rhino.evaluateString(scope, js, "MainActivity", 1, null);             Function function = (Function) scope.get(functionName, scope);             Object result = function.call(rhino, scope, scope, functionParams);             if (result instanceof String) {                 return (String) result;             } else if (result instanceof NativeJavaObject) {                 return (String) ((NativeJavaObject) result).getDefaultValue(String.class);             } else if (result instanceof NativeObject) {                 return (String) ((NativeObject) result).getDefaultValue(String.class);             }             return result.toString();//(String) function.call(rhino, scope, scope, functionParams);         } finally {             Context.exit();         }     }     public static String jsCallJava(String url) {         return "农民伯伯 js call Java Rhino";     } }
注意,混淆的时候js.jar可能混淆不过去,请参照文章4.1的方法。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部