首先看看Java调用js:
先上js代码:
function halloJava(arg){
document.getElementById("content").innerHTML =
("hallo,native friend:"+arg );
}
然后是Java代码:
webView.loadUrl("javascript:halloJava("+"'"+name+"'"+")");
上述的代码实现了从Java中调用js中的halloJava的方法,并传入了一个name的参数;
再来看js调用Java:
先上js代码:
<input type="button" value="点击Android被调用" οnclick="window.Android.hallJs('JS中传来的参数')"/>
再来看Java代码:
webView.addJavascriptInterface(new JSInterface (),"Android");//首先配置webview
class JSInterface {
@JavascriptInterface//添加注解
public void halloJs(String arg){
Toast.makeText(MainActivity.this,arg,Toast.LENGTH_SHORT).show();
}
}
上述代码实现了在js中调用了Java类JSInterface的对象“Android”中的JavascriptInterface注解修饰的halloJs的方法,并传入了“JS中传来的参数”的参数;
上述的两种情况适用于APP已经集成了webview并且是在APP的webview内加载网页,然后实现Java与js的互相调用,但是还有另一种情况,通过浏览器访问某一网页的时候,如何跳转到对应APP的对应activity页面呢?当然能,看下面的实现方式:
首先,在manifest文件中对对应的activity添加intent-filter标签;
<!--用这个Activity专门处理本App调起的情况-->
<activity android:name=".SchemeActivity"
android:label="@string/app_name">
<!--要想在别的App上能成功调起App,必须添加intent过滤器-->
<intent-filter>
<!--协议部分,随便设置-->
<data android:scheme="hallonativeworld"/>
<!--下面这几行也必须得设置-->
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
</activity>
接着,在SchemeActivity中接收并处理URI请求,可以跳转到不同的界面;
// 尝试获取WebApp页面上过来的URL
Uri uri = getIntent().getData();
if (uri != null) {
StringBuffer sb = new StringBuffer();
// 完整的url信息
sb.append("url: " + uri.toString());
// scheme部分
sb.append("\nscheme: " + uri.getScheme());
// host部分
sb.append("\nhost: " + uri.getHost());
// 访问路劲
sb.append("\npath: ");
List<String> pathSegments = uri.getPathSegments();
for (int i = 0; pathSegments != null && i < pathSegments.size(); i++) {
sb.append("/" + pathSegments.get(i));
}
// Query部分
sb.append("\nquery: ?" + uri.getQuery());
tv.setText(sb.toString());
}
最后,在webAPP页面上,通过如下方式调用;
<!-- 注意这里的href格式 -- >
<a href="hallonativeworld://schemedemo/get/info?id=10000">open android native app</a>
完成本文的主题之后,再来聊聊webview;对于系统自带的webview,实在是可以轻松罗列出十大罪状,所以一般建议用第三方开源的webview,这里特别推荐一下腾讯的X5webview;来看看官网中对其优势的分析(他的优势很大一部分对比于系统原生的webview):
TBS(腾讯浏览服务)的优势
1) 速度快:相比系统webview的网页打开速度有30+%的提升;
2) 省流量:使用云端优化技术使流量节省20+%;
3) 更安全:安全问题可以在24小时内修复;
4) 更稳定:经过亿级用户的使用考验,CRASH率低于0.15%;
5) 兼容好:无系统内核的碎片化问题,更少的兼容性问题;
6) 体验优:支持夜间模式、适屏排版、字体设置等浏览增强功能;
7) 功能全:在Html5、ES6上有更完整支持;
8) 更强大:集成强大的视频播放器,支持视频格式远多于系统webview;
9) 视频和文件格式的支持x5内核多于系统内核
10) 防劫持是x5内核的一大亮点
至于更具体的介绍和使用方式,大家可以参考官方文档介绍:https://x5.tencent.com/tbs/guide/sdkInit.html再来聊聊Hybrid APP,Hybrid App(混合模式移动应用)是指介于web-app、native-app这两者之间的app,兼具“Native App良好用户交互体验的优势”和“Web App跨平台开发的优势”,使用H5实现的功能能够在不升级App的情况下动态更新,而且可以在Android或iOS的App上同时运行,节约了成本,提高了开发效率。微信,QQ、QZone、网易云音乐等大量软件都内嵌了H5,也就是在一个App中内嵌一个轻量级的浏览器,一部分原生的功能改为Html 5来开发。其实就是Java代码和JavaScript之间的调用。Cordova是一个广泛使用的Hybrid开发框架,它提供了一套js和Native交互规范,大家可以参考和学习!