要须心地收汗马,孔孟行世目杲杲。这篇文章主要讲述Android和H5交互-基础篇相关的知识,希望能为你提供帮助。
hybrid App开发也不是什么新鲜事了,其中native和h5之间的交互则是必不可少的。android中是如何和H5交互的?
1、webView加载页面我们都知道在Android中是通过webView来加载html页面的,根据HTML文件所在的位置不同写法也不同:
//例如:加载assets文件夹下的test.html页面
mWebView.loadUrl("file:///android_asset/test.html")
//例如:加载网页
mWebView.loadUrl("http://www.baidu.com")
如果只是这样调用mWebView.loadUrl()加载的话,那么当你点击页面中的链接时,页面将会在你手机默认的浏览器上打开。那如果想要页面在App内中打开的话,那么就得设置setWebViewClient:
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
mWebView.loadUrl(url);
return true;
}
}
});
2、Android本地通过java调用HTML页面中的javascript方法想要调用js方法那么就必须让webView支持
WebSettings webSettings = mWebView.getSettings();
//设置为可调用js方法
webSettings.setJavaScriptEnabled(true);
【Android和H5交互-基础篇】若调用的js方法没有返回值,则直接可以调用mWebView.loadUrl("javascript:do()"); 其中do是js中的方法;若有返回值时我们可以调用mWebView.evaluateJavascript()方法:
mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<
String>
() {
@Override
public void onReceiveValue(String value) {
Log.e(TAG, "onReceiveValue value="https://www.songbingjia.com/android/+ value);
}
});
js代码如下:
<
script type="text/javascript">
function sum(a,b){
return a+b;
}
function do(){
document.getElementById("p").innerHTML="hello world";
}
<
/script>
2、js调用Android本地Java方法在Android4.2以上可以直接使用@JavascriptInterface注解来声明,下面是在一个本地Java方法
public class JsInteration {
@JavascriptInterface
public String back() {
return "hello world";
}
}
定义完这个方法后再调用mWebView.addJavascriptInterface()方法:
mWebView.addJavascriptInterface(new JsInteration(), "android");
那么在js中怎么来调用呢?
<
script type="text/javascript">
function s(){
//调用Java的back()方法
var result =window.android.back();
document.getElementById("p").innerHTML=result;
}<
/script>
4、拦截HTML页面中的点击事件
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//判断url拦截事件
if (url.equals("file:///android_asset/test2.html")) {
Log.e(TAG, "shouldOverrideUrlLoading: " + url);
startActivity(new Intent(MainActivity.this,Main2Activity.class));
return true;
} else {
mWebView.loadUrl(url);
return false;
}
}
});
以上就是Java调用js方法以及js调用Java方法的实现交互方式中的一种。下面给出完整代码: mainActivity
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity";
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.webView);
mWebView.loadUrl("file:///android_asset/test.html");
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new JsInteration(), "android");
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.equals("file:///android_asset/test2.html")) {
Log.e(TAG, "shouldOverrideUrlLoading: " + url);
startActivity(new Intent(MainActivity.this,Main2Activity.class));
return true;
} else {
mWebView.loadUrl(url);
return false;
}
}
});
}
//Android调用有返回值js方法
@TargetApi(Build.VERSION_CODES.KITKAT)
public void onClick(View v) {mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<
String>
() {
@Override
public void onReceiveValue(String value) {
Log.e(TAG, "onReceiveValue value="https://www.songbingjia.com/android/+ value);
}
});
}
public class JsInteration {@JavascriptInterface
public String back() {
return"hello world";
}
}
}
test.html
<
!DOCTYPE html>
<
html>
<
head>
<
title>
<
/title>
<
script type="text/javascript">
function sum(a,b){
return a+b;
}
function s(){
var result =window.android.back();
document.getElementById("p").innerHTML=result;
}<
/script>
<
/head>
<
body>
<
button onclick="s()">
调用本地方法<
/button>
<
a href="file:///android_asset/test2.html">
点击<
/a>
<
p id="p">
<
/p>
<
/body>
<
/html>
作者:YouJZ
链接:http://www.jianshu.com/p/a25907862523
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
推荐阅读
- Android:设置EditText 背景
- applicationContext.getBean(“loginEntity”)
- Android 在Android手机上获取其他应用的包名及版本号
- Android中使用TabLayout实现Tab
- 10分钟理解Android数据库的创建与使用(附具体解释和演示样例代码)
- 查看Tomcat状态页,管理app,主机管理
- Android 百度鹰眼轨迹SDK(v2.1.6)
- 如何修复Windows更新错误代码0x800f0984(分步指南)
- 最佳下载完整网站的工具有哪些(HTTrack替代品推荐)