手机
当前位置:查字典教程网 >编程开发 >Java >使用Rhino让java执行javascript的方法实例
使用Rhino让java执行javascript的方法实例
摘要:下载Rhinohttps://developer.mozilla.org/en-US/docs/Rhino把js.jar拷贝到项目工程实现从...

下载Rhino https://developer.mozilla.org/en-US/docs/Rhino

把js.jar拷贝到项目工程

实现从Java中执行js中的函数、从js中调用Java中的方法,代码:

复制代码 代码如下:

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的方法。

【使用Rhino让java执行javascript的方法实例】相关文章:

用html css javascript打造自己的RIA图文教程第1/2页

Java遍历Properties所有元素的方法实例

Java实现堆排序(Heapsort)实例代码

解决java 查看JDK中底层源码的实现方法

java HashMap的keyset实例

java调用未知类的指定方法简单实例

java调用Oracle存储过程的方法实例

使用ANT与YUI压缩js的实现方法

java堆栈类使用实例(java中stack的使用方法)

java string类方法深入解析

精品推荐
分类导航