为什么现在越来越多的APP中开始出现H5页面?

1,H5页面开发效率更高,更改更加方便;

2,适当缩小APP安装包的大小;

3,蹭热点更加方便,比如五一,十一,双十一搞活动;

那么为什么说H5无法取代原生的APP,只能处在一个共存的例子呢?

1,这个是由系统的底层决定的,极端例子,所有的应用都通过H5展示,那么你是否需要一个浏览器?

2,涉及庞大的功能,涉及复杂的逻辑结构,涉及安全性的要求,H5可以胜任吗?

所以,H5和原生的融合会出现动态的调和,最终会找到一个平衡。

那么接下来就说下iOS开发中原生和H5的相互调用。

原生页面优势:(1)运行速度比较快(2)能使用设备的底层功能,如摄像头、方向传感器、重力传感器、拨号、GPS、语音、短信、蓝牙等(3)在界面设计、功能模块、操作逻辑等层面相较web更易

做到App的便捷性和舒适性,功能更加强大(4)节省流量

劣势:(1)不同的操作系统(如Android和iOS)需要独立的进行开发,使用其各自的开发包、开发工具和控件(2)每次有更新,都需要重新打包一次发布到应用平台上,且每次要向各个应用商店进行

提交审核。之后用户需要手动进行点击更新安装(安装成本较高)(3)开发成本比较高,尤其需要适配各种机型时(如Android应用,需要适配各种Android手机)

H5页面优势:(1)由于是运行在浏览器上,所以只需要开发一次便可以在不同的操作系统上显示(2)迭代版本时,不需要打包便可以发布(实时更新、快速迭代),与云端实现实时数据交互(3)开发

成本相对较低,对浏览器的适配较简单,且发布门槛相对较低

劣势:(1)每次打开页面,都得重新加载,获取数据...(2)过于依赖网络,速度无法保证。特别在弱网环境下,不仅耗费流量而且加载缓慢,就算是WiFi情况下也不容乐观(3)只能使用有限的设备底

层功能(无法使用摄像头、方向传感器、重力传感器、拨号、GPS、语音、短信、蓝牙等功能)(4)仍处于发展阶段,部分功能无法在基于现有技术的浏览器基础上实现,且无法全面的显示最完美的用户

体验,只能用现有技术去弥去找最佳解决方案

原生与H5的相互调用,其实也可以简单理解为Webview跟JavaScript的相互调用。

====================Webview调用JS(应用场景较少)=========================

// 网页加载完调用JS弹窗

- (void)webViewDidFinishLoad:(UIWebView *)webView{

//webView 调用 js

NSString *result = [webView stringByEvaluatingJavaScriptFromString:@"javascript:add(3,5);"];

NSLog(@"%@",result);

}

====================JS调用WebView(最常见)=========================

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{

/**

<!-- 自定义协议与OC进行交互 -->

       // 网页上的一个链接,点击这个链接出发以下反应。。。

      <a href="protocol:///showMessage:/晚上小树林见面,有惊喜!!!:D">女神</a>

     */

//在此方法中截取下一个请求的URL,通过自定义协议头,截取要执行的方法和参数

if ([request.URL.scheme isEqualToString:@"protocol"]) {

//调用oc的方法做事

//工作中用下面的

NSArray *pathComponents = [request.URL pathComponents];

//获取到方法名的字符串

NSString *methodName = pathComponents[1];

//获取到的参数的字符串

NSString *param= pathComponents[2];

//SEL

SEL method = NSSelectorFromString(methodName);

//调用方法

if ([self respondsToSelector:method]) {

[self performSelector:method withObject:param];

}

return NO;

}

return YES;

}

// OC的方法

- (void)showMessage:(NSString *)param{

NSLog(@"showMessage---%@",param);

UIViewController *nvshen = [[UIViewController alloc] init];

nvshen.view.backgroundColor = [UIColor yellowColor];

nvshen.title = @"女神经";

[self.navigationController pushViewController:nvshen animated:YES];

}

当然,还有更好的方法,有一个第三方的框架可以用。

在这里推荐一个比较好的第三方库即:WebViewJavascriptBridge 

地址:https://github.com/marcuswestin/WebViewJavascriptBridge

通过使用该库可以轻松实现JS与原生交互。

//初始化WebViewJavascriptBridge方法

_bridge= [WebViewJavascriptBridge bridgeForWebView:self.BookWebView webViewDelegate:self handler:^(id data,WVJBResponseCallback responseCallback) {}];

//原生与JS约定接口名为“testObjcCallback”,data是JS传递过来的信息,responseCallback来将信息传递给JS

[_bridge registerHandler:@"testObjcCallback" handler:^(id  data,WVJBResponseCallback responseCallback) {

responseCallback("postInfomationToJS")

}];

------------------------------------------------------------------------------------------------------------------------------

购买阿里云服务优惠链接:

https://chuangke.aliyun.com/invite?userCode=ff3mpiie

转载于:https://www.cnblogs.com/peteremperor/p/6012969.html

iOS原生和H5的相互调用相关推荐

  1. Unity与iOS原生代码之间的相互调用

    1.Unity调用iOS: 1.1.在Unity C#中: [ DllImport( "__Internal" )] private static extern int _show ...

  2. ios html5上架,iOS原生集成H5+详细流程

    iOS原生集成H5+ 集成方式 独立应用方式集成 Widget方式集成 WebView方式集成 可以打开官方链接: 选择 5+SDK -> 5+SDK集成 -> 平台 下查看集成方式 独立 ...

  3. iOS关于UIWebView和Javascript相互调用及WebViewJavascriptBridge分析

    iOS中 JS与OC通信 1,    基本原理. iOS中展示html文档的控件为UIWebView和WKWebView,都可以直接执行js代码:但是JS不能直接执行OC的代码,好在UIWebView ...

  4. swift 原生给h5发消息_Swift - 使用HTML5进行iOS开发(将HTML5打包成iOS应用)

    下面简单介绍下如何把HTML5编写的页面编译成iOS应用,以及如何让页面与Swift代码进行交互.(本文代码已升级至Swift3) 1,使用UIWebView还是WKWebView来加载html页面 ...

  5. h5 调用ios原生相机拍照上传照片

    1.html中的点击按钮和回调显示标签---------------直接上代码 <!DOCTYPE html> <html lang="en"> <h ...

  6. vue与原生安卓相互调用

    vue与安卓相互调用 (本篇博客如有错误,还望各位大佬指正.) 最近公司有做直播类的项目,由于直播框架限制,限制所用的技术是vue搭建的H5页面嵌入到原生安卓中.由于之前没有过类似的混合开发经验,所以 ...

  7. 安卓与苹果盒子与h5相互调用,js,vue

    公司里面,有原生的安卓和ios开发,为了减少版本更新,个别页面需要用h5来写,放到服务器上,方便及时更新. fn是方法名,strobj是传递的参数,安卓必须是以字符串的形式,ios即可以是字符串也是可 ...

  8. 转载 iOS js oc相互调用(JavaScriptCore) --iOS调用js

    iOS js oc相互调用(JavaScriptCore) 从iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了. 下面我们就简单了解一下这个框 ...

  9. iOS架构-多工程联编及framework之间的相互调用(19)

    对于大公司,大工程来说,业务线很多,也时刻在变,功能模块要求能随时下线,或者业务不再需要了,就需要从主工程中移除相关工程或者库.以减小包的大小.多工程联编是一种多业务合作的一种方法. 有篇文章写的很详 ...

最新文章

  1. 实战:使用Telnet排除网络故障
  2. 关于reference to ‘XXXX’ is ambiguous的解决办法
  3. 010_AOPXml方式开发
  4. 深入理解分布式技术 - 实践分库分表
  5. c++ union内存
  6. 光刷题不参加这些算法竞赛?太亏了!
  7. linux java编译后生成文件_Linux终端编译并执行Java文件
  8. 支付系统整体设计:整体架构设计以及注意要点(三)
  9. linux 下一条命令查出arp
  10. 零基础学python书籍-图书推荐:《零基础学Python(全彩版)》
  11. mysql创建外键失败_mysql创建外键错误
  12. css引用与html语义化
  13. Linux 网络性能测试工具 iperf 的安装和使用
  14. Axure RP 8.0激活码 Mac Windows
  15. pyqt4的一些相关资料整理
  16. 只要你的学校榜上有名,BAT大厂随便进!!(2021年QS世界大学排名)
  17. Minimum supported Gradle version is 6.1.1. Current version is 5.6.4
  18. 英语从句(英语兔学习笔记)
  19. 宏定义有无参数宏定义和带参数宏定义两种
  20. 运维信息系统 (Devops Information System)开发日志

热门文章

  1. jk背带是什么意思_jk裙里面的白色带子是用来干嘛的
  2. 小机器人在现实世界中学会快速驾驶
  3. 关于IIS重启的几种方法
  4. sliverlight 访问WCF服务跨域错误解决方法
  5. Sliverlight调用WebService跨域问题解决
  6. 零基础小白要知道的次世代游戏建模这10问,不然如何轻松征服游戏公司主美?
  7. 近期靠谱EI会议——移动互联网、云计算与信息安全国际学术会议(MICCIS 2023)
  8. 智和网管平台SugarNMS能源行业综合网管解决方案
  9. 快速傅里叶变换(fft)的Matlab实现
  10. python语音合成算法_Python学习案例之Web版语音合成