浅谈UIWebView,HTML5与Native的混合开发

今天在做项目的时候,遇到了UIWebView的问题,所以今天顺便总结一下,同时也简单的谈了一下Native与H5的混合开发,关于混合开发这块,研究的不算太好,希望广大博友指正~~

网络开发中,当公司已经使用 HTML5 技术实现同时适应 Android 和 iOS 等多个平台的网页时,这时往往需要我们 iOS 平台能够嵌入网页并进行各种交互,

这里我们考虑的方案就是:使用 UIWebView 网页控件

UIWebView是苹果给我们提供展示网页的一种控件。

UIWebView的基本用法

我们一般这样创建并加载一个服务器端的网页:

-(UIWebView *)webview
{
    if (!_webview) {

        _webview = [[UIWebView alloc] init];
        _webview.scalesPageToFit = YES;
        _webview.delegate = self;

        NSURL *url =[NSURL URLWithString:self.urlString];
        NSURLRequest *request =[NSURLRequest requestWithURL:url];
        [_webview loadRequest:request];

    }
    return _webview;
}

像这样加载一个本地网页:

- (UIWebView *)webView
{
    if (!_webView) {

        _webView = [[UIWebView alloc] init];
        _webView.scalesPageToFit = YES;
        _webView.delegate = self;

        NSString *resourcePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingString:@"/LocalWeb"];
        NSString *filePath = [resourcePath stringByAppendingPathComponent:@"index.html"];
        NSString *htmlstring=[[NSString alloc] initWithContentsOfFile:filePath  encoding:NSUTF8StringEncoding error:nil];
        [_webView loadHTMLString:htmlstring baseURL:[NSURL fileURLWithPath:resourcePath]];
    }
    return _webView;
}

iOS Native 与 HTML5 之间的交互

Html5的有很多优点,比如开发速度快,app上线也可以随意修改免审核,跨平台,效果也不错。第一次听说这个混合式开发还是自己在钻研UIWebView的时候,那个时候才知道这样开发也是有很多合适的地方的。Cordova和它的前身PhoneGap,国内的WebViewJavascriptBridge都是很好的混合开发解决方案。如果传递的参数比较简单,功能不复杂的话,不用三方也可以很容易的实现。

Objective-C 调用 JavaScript

可以使用webview调用如下代码:

- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;

这个方法向UIWebView传递一段需要执行的JavaScript代码最后获取执行结果。

比如做百思不得姐那个项目时,我需要点击Native的button获取网页上的文字,用来当邮件内容:

//getEmailContent();就是js的方法名
//body就是getEmailContent方法返回的文字信息

NSString * body =[self.webView stringByEvaluatingJavaScriptFromString:@"getEmailContent();"];

JavaScript 调用 Objective-C

实现点击网页上的按钮,调用原生的方法需要用到webview的一个代理:

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

详细说一下调用流程:

点击按钮要JS发送像这样 yuefan://jump?invitingID=1 的一条协议给 native app,

然后app通过代理收到这个协议,就可以根据协议调用自身的方法了。

举个栗子:

App端

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL * url = [request URL];
    if ([[url scheme] isEqualToString:@"yuefan"]) {
        if ([[url host] isEqualToString:@"jump"]) {

            ShopDetailViewController * issuedVC = [[ShopDetailViewController alloc] init];
            issuedVC.shopID = [[url valueForParameter:@"shopID"] intValue];
            [self.navigationController pushViewController:issuedVC animated:YES];
        }
    }

    return YES;
}

Html端

<html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8" />
        <title>测试网页</title>
    </head>
    <body>
        <a href="yuefan://jump?invitingID=1">点击发送</a>
    </body>
</html>
时间: 2024-12-21 19:36:15

浅谈UIWebView,HTML5与Native的混合开发的相关文章

横向浅谈移动技术------( 原生,混合,web --- 谁能问鼎移动开发的明天)

目前移动互联网基本采用了NativeApp.WebApp.HybridApp三种开发模式,很难说这三种模式那种更优越,目前的情况可以说是三分天下吧,不同的开发者可以根据自己的实际情况选择不同的开发模式.谈论那种模式最好实际上事非常无聊的事情. 1.1.     APP三种开发模式 智能手机之普及不用多说,手机APP渗投到各个行业:电商(淘宝.京东等).金融(各手机行业.P2P借贷等).医疗(智慧医疗).交通(滴滴.Uber等).教育(慕课网等).餐饮(饿了吗.美团等)……反正只要是个企业,无论规

浅谈:html5和html的区别

什么是html5呢? html5最先由WHATWG(Web 超文本应用技术工作组)命名的一种超文本标记语言,随后和W3C的xhtml2.0(标准)相结合,产生现在最新一代的超文本标记语言.可以简单点理解成:HTML 5 ≍ HTML+CSS 3+JS+API. hmtl5于html的区别 我们现在web前端开发的静态网页,一般都是html4.0.同时是符合W3C的xhtml1.0规范来的.那么他们两者又有什么实质性的区别呢? 1.在文档类型声明上 html:<!DOCTYPE html PUBL

浅谈HTML5单页面架构(一)——requirejs + angular + angular-route

本文转载自:http://www.cnblogs.com/kenkofox/p/4643760.html 心血来潮,打算结合实际开发的经验,浅谈一下HTML5单页面App或网页的架构. 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又要数单页面架构体验最好,更像原生app.简单来说,单页面App不需要频繁切换网页,可以局部刷新,整个加载流畅度会好很多. 废话就不多说了,直接到正题吧,浅谈一下我自己理解的几种单页面架构: 1.requirejs

【原创】浅谈webview(一)——惊鸿一瞥

众所周知,APP开发过程中经常会通过webview实现HTML5(H5)的渲染,实现H5和Native的混合开发(Hybrid Development).Hybrid Development可以加速开发效率,实现版本的快速迭代,可以实现开发的解耦,丰富开发资源的使用.但是APP通过webview嵌套H5资源同样有绕不开的问题,比如说: 功能性问题,在APP上H5的体验效果跟Native之间还是有不小的差距: 性能性问题: 流量消耗:使用H5实现资源的渲染,访问资源的时候需要消耗大量的流量,对用户

浅谈软件开发者应具备的基本素质

我们常常能在一些电子产品的发布会上听到新产品修复了某些BUG.开发出了某些先进的功能: 我们常常会听到某些黑客攻击某些网站的消息,也可能受过某些电脑病毒的侵害: 我们也常常能在一些科幻大片里见到程序员在紧急关头敲打代码拯救世界. 每天,我们都在使用着电子产品,使用着软件程序开发者的成果.但是,对于普通人,软件开发又高深.难以涉猎.而作为软件开发者,又应该怎么样对待软件开发,应当具备哪些素质?我正在学习软件开发,下面从个人的角度,浅谈自己的看法. 开发软件的基本前提是站在他人的角度考虑问题:软件开

安卓开发_浅谈Android动画(四)

Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1.  ValueAnimator 基本属性动画类 方法 描述 setDuration(long duration) 设置动画持续时间的方法 setEvaluator(TypeEvaluator value) 设置插值计算的类型 setInterpolator(TimeInterpolator value) 设置时间插值器的类型 addUp

Android安全开发之启动私有组件漏洞浅谈

0x00 私有组件浅谈 android应用中,如果某个组件对外导出,那么这个组件就是一个攻击面.很有可能就存在很多问题,因为攻击者可以以各种方式对该组件进行测试攻击.但是开发者不一定所有的安全问题都能考虑全面. ? 对于这样的问题,最方便的修复方式就是在确定不影响业务的情况下,将这个存在问题的组件不对外导出变成私有组件.这样做的确很有效,私有组件也很安全.但是,如果存在某个私有组件能被导出组件启动的话,那么这个私有组件其实就不再是私有了.如果攻击者可以通过控制导出的组件对私有组件进行控制,那么攻

浅谈网站架构演变

浅谈网站架构 作为一个从事后台开发已经2年的程序员来讲,大部分时间都忙于业务逻辑分析,往往忽略了业务之上的架构层面的设计. 本文作为网站架构知识的补充,不仅开拓了眼界,也对以后的程序设计益处多多.下面我们就一起来看看网站架构的演变历史. 网站架构的演变大致分为如下几个阶段: 1 初始阶段的网站架构 网站在最初开始时没有太多人访问,用一台服务器就完全可以胜任,此时的网站架构如下图所示. 应用程序,文件存储,数据库所有的资源都在一台服务器上.也就是经典的LAMP架构模型(Linux操作系统+部署在A

AngularJS进阶(二十五)requirejs + angular + angular-route 浅谈HTML5单页面架构

requirejs + angular + angular-route 浅谈HTML5单页面架构 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又要数单页面架构体验最好,更像原生app.简单来说,单页面App不需要频繁切换网页,可以局部刷新,整个加载流畅度会好很多. 废话就不多说了,直接到正题吧,浅谈一下我自己理解的几种单页面架构: 1.requirejs+angular+angular-route(+zepto) 最后这个zepto可有可无