H5/web混合开发,js获取android,ios原生应用返回数据的实例方法

时间: 2017-10-31阅读: 5324标签: h5

现在的app开发,已经不在是以前一样所以页面都是有原生开发,基于应用的更新上线繁琐,由于H5的易更新,易维护性, 现在很多应用都采用同H5页面混合开发模式,例如:淘宝、QQ、京东、聚划算等等。这边文章主要讲解JS中如何获取原生应用返回给js的数据方法,包括android和ios

js代码如下
function setupWebViewJavascriptBridge(callback) {//ios的桥接
    if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }
    if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }
    window.WVJBCallbacks = [callback]; 
    var WVJBIframe = document.createElement('iframe');
    WVJBIframe.style.display = 'none';
    WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
    document.documentElement.appendChild(WVJBIframe);
    setTimeout(callbackction() { document.documentElement.removeChild(WVJBIframe) }, 0)
}
function getAppinfor(data,callback){//数据,回调
	if(window.android!=undefined){//android挂载的对象
		data.userid=window.android.getUserId();//用户userid	
		if(callback!=undefined){callback();};
	}else{//ios
		setupWebViewJavascriptBridge(callbackction(bridge) { //js回调 (oc向js发送消息后 , js返回信息)
	        bridge.registerHandler('IOSData', callbackction(data, responseCallback){
	        	data.session=data.UserId;
	        	if(callback!=undefined){callback();};
	        });
		});
	};
}
//获取原生iso,android的数据
var data={userid:null};
getAppinfor(data,()=>{
	//后续的操作
})
ios代码

代码开始运行:通过webView加载了js,Object-C中配置桥接的代码,并注册"IOSData"传递数据,h5收到的数据data,并且执行回调函数。

@interface ViewController () <UIWebViewDelegate>
@property (nonatomic, strong) UIWebView *webView;
@property (nonatomic, strong) WebViewJavascriptBridge *bridge;
@end

//以上控制器中创建一个webView,并且加载h5的页面

- (void)viewDidLoad {
    [super viewDidLoad];
    UIWebView *wb = [[UIWebView alloc] initWithFrame:CGRectZero];
    // 设置代理,可以通过拦截请求的方式回调
    wb.delegate = self;
    self.webView = wb;
    // 通过request方式加载本地文件
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"index.html" ofType:nil]]];
    [wb loadRequest:request];
    // 通过JSBridge实现调用js方法
    self.bridge = [WebViewJavascriptBridge bridgeForWebView:wb];
    // 调用js代码中注册的名为IOSData的方法,并且传递参数data。
    //当js中处理完后,调用callback会回调到responseCallback:并且传递responseData回来
    [self.bridge callHandler:@"IOSData" data:@"<data from objc>" responseCallback:^(id responseData) {
        NSLog(@"收到来自js的回调数据 %@", responseData);
    }];
}
android代码
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JS(), "android"); 
//在JS类里实现javascript想调用的方法,并将其实例化传入webview, "android"就是js中调用这个实例的方法
public class JS{
        public void getUserId(){
           return "";//返回给js的数据
        }  
}

完结:这边文章主要讲代码的实现,并没怎么深入的讲解他具体一步一步实现的原理

站长推荐

1.阿里云: 本站目前使用的是阿里云主机,安全/可靠/稳定。点击领取2000元代金券、了解最新阿里云产品的各种优惠活动点击进入

2.腾讯云: 提供云服务器、云数据库、云存储、视频与CDN、域名等服务。腾讯云各类产品的最新活动,优惠券领取点击进入

3.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/36

h5实现名片扫描识功能

点击名片识别按钮,将名片上的个人信息扫描并解析出来显示。需要调出手机摄像头和相册,让用户进行选择;获取照片或者图片的base64数据;调取第三方的orc接口进行图片解析,得到名片上的个人信息,并显示。

H5活动页面2小时快速开发

这是一套我自己经常用的H5活动页面开发脚手架,针对目前一般的H5页面,基本上2小时就能完成相关的开发内容。俗话说:工欲善其事必先利其器,有了这么一套H5页面脚手架,我相信80%的H5页面,都能够在2小时当中开发完成。

h5页面的viewpoint

只要写手机端的h5页面,viewpoint是绕不过的坎,不处理好这个东西,h5页面就无法正常显示。那它到底是怎么回事呢?网上曾看到一个据说很有名的外国人,写过一篇\\\"三个viewpoint\\\"的概念,但是看了,觉得似懂非懂,后来做了不少h5页面

Android H5秒开方案调研—今日头条H5秒开方案详解

文件下载耗时:包括html、css、js、图片等;页面渲染耗时:页面渲染,解析js、css文件等;WebView创建耗时:首次创建WebView耗时大约需要500ms左右,第二次创建耗时大约需要20ms左右

如何在h5中调用支付宝支付功能

如何在自己的H5页面如何集成支付宝支付呢?目前采用前后端分离的开发模式,数据都是通过服务器那边获取的,现在需要集成支付宝支付,下面就简单介绍下。

h5手机摇一摇功能实现:基于html5重力感应DeviceMotionEvent事件监听手机摇晃

DeviceMotionEven是html5提供的一个用来获取设备物理方向及运动的信息(比如陀螺仪、罗盘及加速计)的Dom事件,利用devicemotion实现手机h5页面摇一摇功能

常见的H5移动端Web页面Bug问题解决方案总汇

移动web的兼容性bug的解决方法:远程接口的跨域问题,背景图片会模糊问题,图片加载,拨号功能等

H5嵌入APP后,通过window.WebViewJavascriptBridge原生APP与H5之间交互

原生APP跳转到H5页面时,往往需要携带一些用户信息,之前做法是在跳转的地址中拼接H5页面需要的参数,现在通过window.WebViewJavascriptBridge悄悄的进行数据交互

H5和原生的职责划分

减少工作量(一套代码,多个平台),以及快速的更新迭代(譬如线上更新),而且还需要考虑Native端的高性能以及系统API调用能力,混合页面导航栏组件由原生实现,一些重要的业务页面、带有复杂动画或交互的页面以及一些固定页面由原生实现

h5通过css实现禁止ios端长按复制选中文字的方法

在ios端默认的长按选择,可以对文字进行复制粘贴。但是在实际开发中,针对一些按钮一般要避免长按时弹出选中文字,或者一些罩层要避免弹出。 这篇文章通过css3实现禁止ios端长按复制选中文字的方法

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!

文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全运营推广