源生代码和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 等。。请按照需求取。

时间: 2024-12-13 02:41:26

源生代码和H5的交互 android:的相关文章

Hybrid APP之Native和H5页面交互

Hybrid APP之Native和H5页面交互原理 Hybrid APP的关键是原生页面与H5页面直接的交互,如下图,痛过JSBridge,H5页面可以调用Native的api,Native也可调用H5页面的方法或者通知H5页面回调 在Hybrid APP中,原生与H5的交互方式在Android和iOS上的实现是有异同的,原因是Android.iOS的通信机制有所区别,下面介绍原生和H5相互调用的方法 Native与H5交互的两种方式 原生和前端的交互有两种方式:url scheme以及Jav

本地java代码和javascript进行交互(java和js互调)

在android的开发过程中,有很多时候需要用到本地java代码和javascript进行交互.android对交互进行了很好的封装,在开发中我们可以很简单的用java代码调用webview中的js,也可以用webview中的js来调用本地的java代码,这样我们可以实现很多原来做不了的功能,比如点击网页上的电话号码后,手机自动拨打电话,点击网页中的笑话,自动发送短信等. 废话不多说,这次教程的目标如下 android 中的java代码调用webview里面的js脚本 webview中的js脚本

JavaScript:浅谈iOS与H5的交互-JavaScriptCore框架

JavaScript:浅谈iOS与H5的交互-JavaScriptCore框架 前言 小的作为一个iOS程序猿,可能研究JavaScript以及H5相关的知识并不是为了真正的要去转行做这一方面,其实更多的为了要研究OC中的JavaScriptCore框架,JavaScriptCore框架主要是用来实现iOS与H5的交互.当然了,最早我曾经写过iOS浅谈webView的JS一种用法.(去掉web显示页的广告),这种算得上最简单的iOS与H5的交互了.现在混合编程越来越多,H5的相对讲多,所以研究J

iOS原生App与H5页面交互笔记

iOS原生App与H5页面交互笔记 字数390 阅读2204 评论1 喜欢25 最近在做一个项目用到了原生App与H5交互,之前有做过简单的H5页面直接调用原生方法的例子,就是利用UIWebView中的代理方法 //webview每次加载之前都会调用这个方法,利用该代理方法截取JS的href来调用原生的方法 - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigatio

[WPF自定义控件库] 自定义控件的代码如何与ControlTemplate交互

1. 前言 WPF有一个灵活的UI框架,用户可以轻松地使用代码控制控件的外观.例设我需要一个控件在鼠标进入的时候背景变成蓝色,我可以用下面这段代码实现: protected override void OnMouseEnter(MouseEventArgs e) { base.OnMouseEnter(e); Background = new SolidColorBrush(Colors.Blue); } 但一般没人会这么做,因为这样做代码和UI过于耦合,难以扩展.正确的做法应该是使用代码告诉C

js 代码运行中插入交互

js 代码运行中插入交互 背景 最近突发奇想,如果能在 js 运行时插入用户操作,是否就可以看到每一步的状态了呢? 以冒泡排序为例,最终实现的效果是这样的: 思路 我们知道,如果代码中 await 一个 promise,那么这行代码需要等到 promise 状态为 resolved 时才能向下继续执行. 例如: await new Promise(resolve=>{}),这样代码将会一直在这里等待下去,因为这个 Promise 的状态为pending. 有了这个思路,我们只需想办法将这个 pr

Android原生代码拦截H5 Web页面中JavaScript弹窗/弹框

<html> <body> <script> function showAlert(){ alert("JavaScript - hello , world !"); } function showConfirm(){ confirm("访问 https://blog.csdn.net/zhangphil"); } function showPrompt(){ var string=prompt("请输入用户名"

Webview 与h5的交互

步骤:H5代码 <html> <head> <meta charset="UTF-8"> <title>交互Demo</title> <meta content="initial-scale=1.0,user-scalable=no,maximum-scale=1,width=device-width" name="viewport"> </head> <b

Android通过外部浏览器调用微信H5支付,Android+PHP详解

看了好多关于讲解微信H5支付开发的文章,大多数都是通过微信内部浏览器来调用支付接口(其实就是公众号支付),可能是因为H5支付接口刚开放不久吧. 微信官方体验链接:http://wxpay.wxutil.com/mch/pay/h5.v2.php,请在微信外浏览器打开. 看了上面的体验链接,如果感兴趣,可以接着往下看,希望对你有所帮助. 一.Android端 Android端代码相对来说比较简单一些,我这边直接调用系统浏览器打开H5支付页面 Intent intent = new Intent()