webview和h5的交互
来源:互联网 发布:电子日历制作软件 编辑:程序博客网 时间:2024/05/22 02:03
现在APP中经常会发现很多很多的H5页面,所以webview与js的交互显得非常重要:
一.理论:
在交互这块我们会涉及到两个场景:一种是h5直接调用原生的,这个时候在原生这边登录成功后,我们会执行一段协商好的js代码,callback传递一些参数返回给h5;另外一种是原生登录成功后,服务端会返回给我们cookie,并利用框架的属性把这个cookie进行持久化,这样下次请求的时候则自带用户cookie,在请求url的时候我们在链接中拼接uid和token。
二.实例:
1. android中的java代码调用webview里面的js脚本:
要点:只需调用webview的loadUrl方法即可
- // 启用javascript
- contentWebView.getSettings().setJavaScriptEnabled(true);
- // 从assets目录下面的加载htmlb
- contentWebView.loadUrl("file:///android_asset/wst.html");
-
- // 无参数调用
- contentWebView.loadUrl("javascript:javacalljs()");
2.webview中的js脚本调用本地的java代码:
要点:先对webview绑定javascriptInterface,js脚本通过这个接口来调用java代码,javainterface实际就是一个普通的java类,里面是我们本地的java代码,
将object传递给webview,并指定别名,这样js脚本就可以通过我们给的这个别名来调用我们的方法,在上面的代码中,this是一个实例化的对象,wst是这个对象在js中的别名。
- contentWebView.addJavascriptInterface(this, "wst");
3.java代码调用JS并传递参数:
要点:只需在待用js函数的时候加入参数即可,在传递一个参数的时候,需注意的是str类型在传递的时候参数要用单引号括起来
mWebView.loadUrl("javascript:test('" + aa+ "')"); //aa是js的函数test()的参数
4.JS调用java并传递参数:
要点:java函数正常书写,在js脚本中调用的时候需要参数统一
- <div id='b'><a onclick="window.wst.clickOnAndroid(2)">b.c</a></div>
其中值得注意的是各个参数均需要相互对应,这个例子的协议是:window.wst.clickOnAndroid(....),如果在代码中实现了clickOnAndroid(...)方法
看下例子:
WebViewActivity.class
public void onCreate(Bundle savedInstanceState) {
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");
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(btnClickListener);
contentWebView.addJavascriptInterface(this, "wst");
}
OnClickListener btnClickListener = new Button.OnClickListener() {
public void onClick(View v) {
// 无参数调用
contentWebView.loadUrl("javascript:javacalljs()");
// 传递参数调用
contentWebView.loadUrl("javascript:javacalljswithargs(" + "'hello world'" + ")");
}
};
public void startFunction() {
Toast.makeText(this, "js调用了java函数", Toast.LENGTH_SHORT).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
msgView.setText(msgView.getText() + "\njs调用了java函数");
}
});
}
public void startFunction(final String str) {
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
msgView.setText(msgView.getText() + "\njs调用了java函数传递参数:" + str);
}
});
}
wst.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
<script type="text/javascript">
function javacalljs(){
document.getElementById("content").innerHTML +=
"<br\>java调用了js函数";
}
function javacalljswithargs(arg){
document.getElementById("content").innerHTML +=
("<br\>"+arg);
}
</script>
</head>
<body>
this is my html <br/>
<a onClick="window.wst.startFunction()">点击调用java代码</a><br/>
<a onClick="window.wst.startFunction('hello world')">点击调用java代码并传递参数</a>
<br/>
<div id="content">内容显示</div>
</body>
</html>
以上这个例子的协议是:window.wst.startFunction()
0 0
- webview和h5的交互
- Android的webView和h5+js交互
- WebView与H5的交互
- Webview 与h5的交互
- Webview 与h5的交互
- android 的webView加载h5,和h5的交互(java和JavaScript的交互)
- 代码干货 | H5和NA(WebView)的交互
- iOS webview与H5的交互
- webview与h5交互
- iOS webView 和 H5 页面交互(点击获取H5页面中的按钮,做自己想做的操作)
- Android 内嵌 webView 与H5交互的问题和总结
- native 和 H5 的交互
- native 和 H5 的交互
- Android webview 和H5交互选择图片功能
- iOS webView与H5的交互(返回页面的处理)
- iOS webView与H5的交互(返回页面的处理)
- 基于cordova实现的webview实现与h5的交互
- iOS webView与H5的交互(返回页面的处理)
- JDK环境变量中dt.jar、tools.jar,rt.jar,source.jar等变量值的作用
- Comparable和Comparator的区别
- 完美解决Nginx配置反向代理时出现的13: Permission denied) while connecting to upstream, client: 127.0.0.1
- printf
- phpMyAdmin使用教程:[2]用户及权限管理
- webview和h5的交互
- 单独使用EHCache
- Android Studio 开发JNI工程步骤
- C# 重构之四(提取接口重构)
- xml tomcat 关系
- Kafka分布式消息队列框架
- arrayList——list和arrayList区别
- VB是否过时?
- oracle数据库使用学习