android webview js交互 (java和js交互)
16lz
2021-01-23
转于:http://blog.csdn.net/wangtingshuai/article/details/8631835
--------------------------------------------------------------------------------------------------------------------
在android的开发过程中,有很多时候需要用到本地java代码和javascript进行交互。android对交互进行了很好的封装,在开发中我们可以很简单的用java代码调用webview中的js,也可以用webview中的js来调用本地的java代码,这样我们可以实现很多原来做不了的功能,比如点击网页上的电话号码后,手机自动拨打电话,点击网页中的笑话,自动发送短信等.
废话不多说,这次教程的目标如下- android 中的java代码调用webview里面的js脚本
- webview中的js脚本调用本地的java代码
- java调用js并传递参数
- js调用java并传递参数
- //启用javascript
- contentWebView.getSettings().setJavaScriptEnabled(true);
- //从assets目录下面的加载html
- contentWebView.loadUrl("file:///android_asset/wst.html");
- //无参数调用
- contentWebView.loadUrl("javascript:javacalljs()");
webview中js调用本地java方法,这个功能实现起来稍微有点麻烦,不过也不怎么复杂, 首先要对webview绑定javascriptInterface,js脚本通过这个接口来调用java代码。 [java] view plain copy
- contentWebView.addJavascriptInterface(this,"wst");
功能三
java代码调用js并传递参数
只需要在待用js函数的时候加入参数即可,下面是传递一个参数的情况,需要多个参数的时候自己拼接及行了,注意str类型在传递的时候参数要用单引号括起来
[java] view plain copy
- mWebView.loadUrl("javascript:test('"+aa+"')");//aa是js的函数test()的参数
js调用java函数并传参,java函数正常书写,在js脚本中调用的时候稍加注意
然后在html页面中,利用如下代码,即可实现调用 [html] view plain copy
- <divid='b'><aonclick="window.wst.clickOnAndroid(2)">b.c</a></div>
这里准备了一个实例,实现上面的功能 这里是实例的html代码,从assert中加载,原来做项目的时候,从assert中加载的中文网页会出现乱码,解决办法就是给html指定编码。如下
[html] view plain copy
- <html>
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
- <scripttype="text/javascript">
- functionjavacalljs(){
- document.getElementById("content").innerHTML+=
- "<br\>java调用了js函数";
- }
- functionjavacalljswithargs(arg){
- document.getElementById("content").innerHTML+=
- ("<br\>"+arg);
- }
- </script>
- </head>
- <body>
- thisismyhtml<br/>
- <aonClick="window.wst.startFunction()">点击调用java代码</a><br/>
- <aonClick="window.wst.startFunction('helloworld')">点击调用java代码并传递参数</a>
- <br/>
- <divid="content">内容显示</div>
- </body>
- </html>
java代码 如下
[java] view plain copy
- packagewst.webview;
- importandroid.annotation.SuppressLint;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.view.View;
- importandroid.view.View.OnClickListener;
- importandroid.webkit.WebView;
- importandroid.widget.Button;
- importandroid.widget.TextView;
- importandroid.widget.Toast;
- publicclassMainActivityextendsActivity{
- privateWebViewcontentWebView=null;
- privateTextViewmsgView=null;
- @SuppressLint("SetJavaScriptEnabled")
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- contentWebView=(WebView)findViewById(R.id.webview);
- msgView=(TextView)findViewById(R.id.msg);
- //启用javascript
- contentWebView.getSettings().setJavaScriptEnabled(true);
- //从assets目录下面的加载html
- contentWebView.loadUrl("file:///android_asset/wst.html");
- Buttonbutton=(Button)findViewById(R.id.button);
- button.setOnClickListener(btnClickListener);
- contentWebView.addJavascriptInterface(this,"wst");
- }
- OnClickListenerbtnClickListener=newButton.OnClickListener(){
- publicvoidonClick(Viewv){
- //无参数调用
- contentWebView.loadUrl("javascript:javacalljs()");
- //传递参数调用
- contentWebView.loadUrl("javascript:javacalljswithargs("+"'helloworld'"+")");
- }
- };
- publicvoidstartFunction(){
- Toast.makeText(this,"js调用了java函数",Toast.LENGTH_SHORT).show();
- runOnUiThread(newRunnable(){
- @Override
- publicvoidrun(){
- msgView.setText(msgView.getText()+"\njs调用了java函数");
- }
- });
- }
- publicvoidstartFunction(finalStringstr){
- Toast.makeText(this,str,Toast.LENGTH_SHORT).show();
- runOnUiThread(newRunnable(){
- @Override
- publicvoidrun(){
- msgView.setText(msgView.getText()+"\njs调用了java函数传递参数:"+str);
- }
- });
- }
- }
布局文件 [html] view plain copy
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical">
- <WebView
- android:id="@+id/webview"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_weight="9"/>
- <ScrollView
- android:id="@+id/scrollView1"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- <TextView
- android:id="@+id/msg"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:text="text"/>
- </ScrollView>
- <Button
- android:id="@+id/button"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="java调用js函数"/>
- </LinearLayout>
更多相关文章
- C语言函数以及函数的使用
- android 代码混淆之后 微信分享不起作用
- Android移动操作系统源代码
- android_relative布局参数学习
- Android Studio系列(二)使用Android Studio开发/调试整个android系
- Android开发常用代码片段(三)
- Android 性能优化之Java(Android)代码优化 (三)