源生代码和H5的交互 android:
1: 默认的事情:
Android 通过内置的UI控件WebView来加载网页。
网页是用一个网络地址来表示的:
其整个使用方法很简单如下:(android不关心实际的html5代码)
String mUrl ="http://www.baidu.com"; //代表了某个网页的网址
WebView mWebView = newWebView(); //用来家在网址的UI控件
mWebView.loadUrl(mUrl); //加载指定网址
2:Html5 调用 android 本地方法
2.1 Html5 调用 android 本地方法一
a: android 本地将被Html5调用的方法都定义在一个Object中。【假定这个Object 叫 JavaScriptInterface1 】(暴露给html5的方法)
b:WebView通过addJavascriptInterface(new JavaScriptInterface1(), "robot");
将定义了回调方法的对象注入WebView中,这样html5就能通过注入的这个对象调用本地方法。【注入的对象的引用叫 “robot”】
c: 在html5中,如下书写 ,就能调用android本地的方法
<p>
<button onclick="robot. callAndroidMethod()">点击我调用android 方法</button>
</p>
<p>
<button onclick="interface.callFromJSBasicDataType(100,100,'a',true)">callnative method to test basic datatype through javascriptInterface</button>
</p>
d: 要是需要带参数交互那么android 本地代码和 JS中定义的方法可以如下书写:
//------android 代码示例------
public voidcallFromJSBasicDataType(int x,float y,char c,boolean result){
String str ="-"+(x+1)+"-"+(y+1)+"-"+c+"-"+result;
}
public void callAndroidMethod(){
AppUtils.showDialog();
}
//------JS配合上面的android示例如下------
<p>
<buttononclick="robot.callFromJSBasicDataType(100,100,'a',true)">点击我调用android 方法</button>
</p>
2.2 Html5 调用 android 本地方法二
在网页跳转的时候【必须有跳转】,截获跳转地址Url,分析Url从而得知意图。
android 本地通过自定义WebView中使用到的WebClent对象,从而截获跳转地址:
private class CustomWebViewClient extendsWebViewClient {
//重写webclient,从而截获跳转的地址
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//注意,下面的判断就是意图分析
if (url.contains("www.mystore.com.cn")) {
String msg = url;
AppUtils.showAlertDialog(Html5CallNativeFromSelfWebClient.this,msg);
return true;
}
return false;
}
}
3 android 本地方法调用html5
android主要是通过WebView的webView.loadUrl("JavaScript:xxmethod();"); 来调用嵌入html5中的 方法。 例子如下:
a:html5 中 定义一个方法,名叫 "noParamFunction()"
<html>
<head>
<script>
function noParamFunction() {
var component = document.getElementById("noparam_ta");
component.value = component.value + "native button clicked,call js with noparams\n";
}
</script>
</head>
</html>
b: 在android本地:想调用javascript中的noParamFunction方法,如下即可
webView.loadUrl("javascript:noParamFunction();");
4: 再往下就是URL中附加的私有协议了
后端给前端发送数据的约定
1:后端给前端发送的数据整个就是一个网页地址 + ?#myrainbowparams#+ json串 +#myrainbowparams# 的组合结构。
(比如:
http://mystore.com.cn/v1/page/goods_info?#myrainbowprams#{"clientaction":"1","actionid": "100","params": {"bugoodsid": "1000"}}#myrainbowprams#
2:注意:
只有满足下面2个条件前端才会根acitonid 去执行动作
a:h5给的数据中包含#myrainbowprams#
b: clientaction = 1
3:参数说明
|
clientaction |
TRUE |
string |
是否需要app自己处理H5给的数据。" 0->不需要处理" ; "1-->需要处理" |
|
|
actionid |
true |
string |
clientaction为0 actionid 填为-1;clientaction为1 actionid填为正常的编号 |
|
|
params |
TRUE |
jsonobject |
clientaction为0 params 填为null ; clientaction为1 params 正常填写 |
登录:可选
h5给前段的整个数据示例如下:
http://mystore.com.cn/v1/page/goods_info?#myrainbowprams#{
"clientaction": "1",
"actionid": "100",
"params": {
"bugoodsid": "1000"
}
}
#myrainbowprams#
对上面的这些信息前段接收到之后理解如下:
1:前端需要自己处理,而不是简单的利用webkit引擎去进行页面跳转
2:前端需要执行编号为100的动作
3:执行编号为100的动作所需要的参数在params中,有 bugoodsid , 有url 等。。请按照需求取。
源生代码和H5的交互 android:的更多相关文章
- Android中WebView与H5的交互,Native与JS方法互调
项目中经常用到WebView与H5的交互,一个是H5调本地方法,一个是本地调H5方法,在此记录一下. 首先,启用JS支持 //启用js支持 webSettings.setJavaScriptEnabl ...
- Hybrid APP之Native和H5页面交互原理
Hybrid APP之Native和H5页面交互原理 Hybrid APP的关键是原生页面与H5页面直接的交互,如下图,痛过JSBridge,H5页面可以调用Native的api,Native也可调用 ...
- iOS原生APP与H5+JS交互////////////////////zzzz
原生代码中直接加载页面 1. 具体案例 加载本地/网络HTML5作为功能介绍页 2. 代码示例 //本地 -(void)loadLocalPage:(UIWebView*)webView ...
- Webview之H5页面调用android的图库及文件管理
h5页面打开图片管理器 一般页面在pc打开文件管理器是用 type="file"的代码,可是这在android的webview是无效的,必须为webview设定WebChromeC ...
- 浅谈 iOS 与 H5 的交互- JavaScriptCore 框架
前言 小的作为一个iOS程序猿,可能研究JavaScript以及H5相关的知识并不是为了真正的要去转行做这一方面,其实更多的为了要研究OC中的JavaScriptCore框架,JavaScriptCo ...
- 换个视角来看git命令与代码库发生网络交互报错事件
git的一系列命令中像 clone.pull.push等与代码库发生网络交互时,可能报下面的错误信息 fatal: remote error: CAPTCHA required Your Stash ...
- android json解析及简单例子+Android与服务器端数据交互+Android精彩案例【申明:来源于网络】
android json解析及简单例子+Android与服务器端数据交互+Android精彩案例[申明:来源于网络] android json解析及简单例子:http://www.open-open. ...
- [WPF自定义控件库] 自定义控件的代码如何与ControlTemplate交互
1. 前言 WPF有一个灵活的UI框架,用户可以轻松地使用代码控制控件的外观.例设我需要一个控件在鼠标进入的时候背景变成蓝色,我可以用下面这段代码实现: protected override void ...
- Android原生代码拦截H5 Web页面中JavaScript弹窗/弹框
<html> <body> <script> function showAlert(){ alert("JavaScript - hello , worl ...
随机推荐
- Vue的优缺点
使用vue.js做开发快两年了,对vue的优缺点有一点自己的见解,跟大神比不了,但是面试基本够用 vue在国内能被广泛使用的首要原因是它是基于mvvm框架做开发的,mvvm是前端开发中一种很有影响力的 ...
- python基础:面向对象
一.定义 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类:一个种类,一个模型. 对象:指具体的东西,模型造出来的东西叫做对象. 实例:实例和对象是一样的. 实例化:实例化就 ...
- 感知生命周期的数据 -- LiveData
感知生命周期的数据 -- LiveData 零. 前言 上篇文章<万物基于Lifecycle> 介绍了整个Lifecycle体系的基石,今天这篇文章咱们来看看Jetpack给我们带来的活着 ...
- 2020年 .NET ORM 完整比较、助力选择
.NET ORM 前言 为什么要写这篇文章? 希望针对 SEO 优化搜索引擎,让更多中国人知道并且使用.目前百度搜索 .NET ORM 全是 sqlsugar,我个人是无语的,每每一个人进群第一件事就 ...
- ajax之---上传文件
“伪”ajax向后台提交文件 <iframe style="display: none" id="iframe1" name="i ...
- Linux下rm操作误删恢复
1.查看被误删的分区 df /home/Java/... 一直到刚刚被误删的文件的路径下 2.在debugfs打开分区 open /dev/ssl 最好这个分区可能不一样,根据上 ...
- c语言之结构
定义结构: struct point { int x; int y; }; 定义结构并声明变量: struct point { int x; int y; }pt1,pt2,pt3; 声明结构变量 s ...
- XXE漏洞介绍 & XXE漏洞攻击 & 修复建议
介绍XXE漏洞 XML外部实体注入(XML External Entity)简称XXE漏洞,XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是-种允许用户对自己的标记语 ...
- Solon详解(八)- Solon的缓存框架使用和定制
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- 高德AR & 车道级导航技术演进与实践
2020云栖大会于9月17日-18日在线上举行,阿里巴巴高德地图携手合作伙伴精心组织了"智慧出行"专场,为大家分享高德地图在打造基于DT+AI和全面上云架构下的新一代出行生活服务平 ...