最近研究了android与Js交互,现在总结一下:
js给android页面传数据(两种)
《第一种》
1.在要嵌入HTML网页的activty页面的布局文件中写您自己的WebView
<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
2.在此activity代码中写常规的webView的设置,这里只摘出最重要的一句,其他都是常规
webView.addJavascriptInterface(Object object, String name)
第一个参数:您需要当点击html页面某个组件时activity执行某个方法,或者将html页面上的数据带过来时需要执行activity某个方法,而这个方法所在的类就是这个参数(一般是咱们自定义类,然后里面写对应的方法)
class InJavaScript {
@JavascriptInterface
public void runOnAndroidJavaScript(final String str) {
Log.e("Log", "str = " + str);
handler.post(new Runnable() {
public void run() {
TextView show = (TextView) findViewById(R.id.textview);
show.setText(str); } }); }}
注意这里面@JavascriptInterface 这个必须加,因为在android 4.4 以上 JS部分功能已经不能使用,如果不加这句,高版本不能执行到这个方法,方法名也是自定义的,只需要保证和html文件中相应的一致即可
第二个参数:标示,类似于编号。
2.在html文件中,这方面可以先学一下html、js脚本基本语句,我也是看了一早上大概明白了一些,这里指出js通过接口调用android的函数
window.injs.runOnAndroidJavaScript(str);//通过injs接口调用android的函数
这里的injs就是我们刚才addJavascriptInterface()方法的第二个参数名,根据这里的名字换成您自己的就行。而这个runOnAndroidJavaScript(str)就是刚才咱们自定义的类中自定义的方法,参数str就是我们需要从html页面组件中传给activity的信息。
《第二种》
主要在html文件中写,通过alert,大家可以了解一下js中的alert,
简单介绍一下:在android中弹窗是dialog,而js中弹窗是alert,但是当网页被迁入到webView中的时候,alert是不能弹窗的,这时候需要在activity端重新写弹窗,需要用到下面要说的方法setWebChromeClient。
在html某个按钮上添加动作
function ale()
{
alert("This is an alert!");
}
在activity代码中WebView的这个方法很关键:webView.setWebChromeClient:
辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等
webView.setWebChromeClient(new WebChromeClient(){
public boolean onJsAlert(WebView view, String url, String message, JsResult result){。。。。}
WebChromeClient类有很多方法,具体可以去看源码,这里主要用到onJsAlert方法
这个方法的message就是alert的参数,所以我们只需要在此方法下根据不同的message做不同的事件或者获取数据即可。
写到这里,估计大家应该基本懂了,觉得有用请点赞。如果有疑惑,我上传了demo,可以下载:http://download.csdn.net/detail/zizhan8723/9694032