js调用安卓原生方法,js 中调用android中的方法复杂参数怎么对应

1,js 中调用android中的方法复杂参数怎么对应webview中js调用本地java方法,这个功能实现起来稍微有点麻烦,不过也不怎么复杂,首先要对webview绑定javascriptInterface,js脚本通过这个接口来调用java代码 。contentWebView.addJavascriptInterface(this, "wst"); javainterface实际就是一个普通的java类,里面是我们本地实现的java代码, 将object 传递给webview , 并指定别名,这样js脚本就可以通过我们给的这个别名来调用我们的方法,在上面的代码中,this是实例化的对象,wst是这个对象在js中的别名
2,android 中怎么执行js脚本android要执行脚本,只有通过本地的webview打开脚本页面 。调用步骤1、设置webview支持脚本webSettings.setJavaScriptEnabled(true);2、打开脚本页面mWebView.loadUrl("file:///android_asset/demo.html");//这里打开该app的asset目录下的demo.html,里面含有wave函数脚本3、调用脚本mWebView.loadUrl("javascript:wave()");//调用打开页面中的wave函数webView里面可以执行js脚本 。webView里面可以执行js脚本 。但如果不是高手还是算了吧,太难了 。按照给定的字符集存储文件时 , 在文件的最开头的三个字节中就有可能存储着编码信息 , 所以,基本的原理就是只要读出文件前三个字节,判定这些字节的值,就可以得知其编码的格式 。其实,如果项目运行的平台就是中文操作系统,如果这些文本文件在项目内产生,即开发人员可以控制文本的编码格式,只要判定两种常见的编码就可以了:GBK和UTF-8 。由于中文Windows默认的编码是GBK,所以一般只要判定UTF-8编码格式 。
3 , 如何在JAVASCRIPT调用Android JAVA函数一、网页的JS代码调用ANDROID中JAVA代码的方法在网页中调用java代码、需要在webview控件中添加javascriptInterfacecontentWebView = (WebView) findViewById(R.id.webview);//启用javascriptcontentWebView.getSettings().setJavaScriptEnabled(true);contentWebView.addJavascriptInterface(this, "js对象名");在Activity中定义一个要被js调用的方法、src为js传递过来的参数、如果没有不传也可以public void jsFunction(final String str) Toast.makeText(this, str, Toast.LENGTH_SHORT).show();runOnUiThread(new Runnable() @Overridepublic void run() //在里对Android应用的UI进行处理}});}在网页中、只需要像调用js方法一样、进行调用就可以<a onClick="window.js对象名.jsFunction(′hello world′)" >点击调用java代码并传递参数</a>二、ANDROID中JAVA代码调用网页的JS代码的方法Java代码调用js并传参其实是通过WebView的loadUrl方法去调用的、只是参数url的写法不一样而已// 无参数调用contentWebView.loadUrl("javascript:javacalljs()");// 传递参数调用contentWebView.loadUrl("javascript:javacalljswithargs("+ "′hello world′" + ")");三、JAVA和JS交互注意事项1、Java 调用 js 里面的函数、效率并不是很高、估计要200ms左右吧、做交互性很强的事情、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法2、Java 调用 js 的函数、没有返回值、调用了就控制不到了3、Js 调用 Java 的方法、返回值如果是字符串、你会发现这个字符串是 native 的、转成 locale 的才能正常使用、使用 toLocaleString() 函数就可以了、不过这个函数的速度并不快、转化的字符串如果很多、将会很耗费时间4、网页中尽量不要使用jQuery、执行起来需要5-6秒、最好使用原生的js写业务脚本、以提升加载速度、改善用户体验 。一、网页的JS代码调用ANDROID中JAVA代码的方法在网页中调用java代码、需要在webview控件中添加javascriptInterfacecontentWebView = (WebView) findViewById(R.id.webview);//启用javascriptcontentWebView.getSettings().setJavaScriptEnabled(true);contentWebView.addJavascriptInterface(this, "js对象名");在Activity中定义一个要被js调用的方法、src为js传递过来的参数、如果没有不传也可以public void jsFunction(final String str) Toast.makeText(this, str, Toast.LENGTH_SHORT).show();runOnUiThread(new Runnable() @Overridepublic void run() //在里对Android应用的UI进行处理}});}在网页中、只需要像调用js方法一样、进行调用就可以<a onClick="window.js对象名.jsFunction(′hello world′)" >点击调用java代码并传递参数</a>二、ANDROID中JAVA代码调用网页的JS代码的方法Java代码调用js并传参其实是通过WebView的loadUrl方法去调用的、只是参数url的写法不一样而已// 无参数调用contentWebView.loadUrl("javascript:javacalljs()");// 传递参数调用contentWebView.loadUrl("javascript:javacalljswithargs("+ "′hello world′" + ")");三、JAVA和JS交互注意事项1、Java 调用 js 里面的函数、效率并不是很高、估计要200ms左右吧、做交互性很强的事情、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法2、Java 调用 js 的函数、没有返回值、调用了就控制不到了3、Js 调用 Java 的方法、返回值如果是字符串、你会发现这个字符串是 native 的、转成 locale 的才能正常使用、使用 toLocaleString() 函数就可以了、不过这个函数的速度并不快、转化的字符串如果很多、将会很耗费时间4、网页中尽量不要使用jQuery、执行起来需要5-6秒、最好使用原生的js写业务脚本、以提升加载速度、改善用户体验你好:一、网页的JS代码调用ANDROID中JAVA代码的方法在网页中调用java代码、需要在webview控件中添加javascriptInterfacecontentWebView = (WebView) findViewById(R.id.webview);//启用javascriptcontentWebView.getSettings().setJavaScriptEnabled(true);contentWebView.addJavascriptInterface(this, "js对象名");在Activity中定义一个要被js调用的方法、src为js传递过来的参数、如果没有不传也可以public void jsFunction(final String str)Toast.makeText(this, str, Toast.LENGTH_SHORT).show(); runOnUiThread(new Runnable()@Overridepublic void run()//在里对Android应用的UI进行处理} });}在网页中、只需要像调用js方法一样、进行调用就可以<a onClick="window.js对象名.jsFunction(′hello world′)" > 点击调用java代码并传递参数</a>二、ANDROID中JAVA代码调用网页的JS代码的方法Java代码调用js并传参其实是通过WebView的loadUrl方法去调用的、只是参数url的写法不一样而已// 无参数调用contentWebView.loadUrl("javascript:javacalljs()");// 传递参数调用contentWebView.loadUrl("javascript:javacalljswithargs("+ "′hello world′" + ")");三、JAVA和JS交互注意事项1、Java 调用 js 里面的函数、效率并不是很高、估计要200ms左右吧、做交互性很强的事情、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法2、Java 调用 js 的函数、没有返回值、调用了就控制不到了3、Js 调用 Java 的方法、返回值如果是字符串、你会发现这个字符串是 native 的、转成 locale 的才能正常使用、使用 toLocaleString() 函数就可以了、不过这个函数的速度并不快、转化的字符串如果很多、将会很耗费时间4、网页中尽量不要使用jQuery、执行起来需要5-6秒、最好使用原生的js写业务脚本、以提升加载速度、改善用户体验[java] view plaincopyprint?package suggestion16; import java.io.filenotfoundexception; import java.io.filereader; import java.util.scanner; import javax.script.bindings; import javax.script.invocable; import javax.script.scriptcontext; import javax.script.scriptengine; import javax.script.scriptenginemanager; import javax.script.scriptexception; public class scripttext public static void main(string[] args) throws filenotfoundexception, scriptexception, exception scriptengine engine = new scriptenginemanager().getenginebyname("javascript"); bindings bind = engine.createbindings(); bind.put("factor", 2); //这里绑定一个factor的值为2. engine.setbindings(bind,scriptcontext.engine_scope); scanner input = new scanner(system.in); while(input.hasnext()) int first = input.nextint(); int sec = input.nextint(); system.out.println("输入的参数为:"+ first+ " , " + sec); engine.eval(new filereader("e:/cal.js")); if(engine instanceof invocable) invocable in = (invocable)engine; double result = (double)in.invokefunction("cal",first,sec); system.out.println("运算结果为:" + result.intvalue()); } } } }其中的“e:/cal.js”就是我们js文件的保存路径 。并且这个主函数可以循环的输入 。我们运行一下这个程序得到的结果如下:[html] view plaincopyprint?1 2 输入的参数为:1 , 2 运算结果为:1上面也就是 调用了 1 + 2 - 2 = 1 ,所以结果为1我们将js文件中的function方法改变下,改编为下面的函数:[javascript] view plaincopyprint?function cal(var1,var2) return var1+var2*factor; }【js调用安卓原生方法,js 中调用android中的方法复杂参数怎么对应】

    推荐阅读