UIWebView与JS交互

UIWebView的三种加载方式和其代理

API 提供了三种方法:

1.- (void)loadRequest:(NSURLRequest *)request; //加载HTML链接地址

2.- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL; //加载HTML代码

3.- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;

其中baseURL 是指基准的url 是一个绝对的地址,程序要用到的其他资源就可以根据这个基准地址进行查找而不用再次定位到绝对地址;

为什么需要设置baseURL?

(1)也就是data中有一些链接是图片,css都是外部文件,然后这些文件需要到一个目录上去找。baseURL就是这个目录。

(2)使用loadData方法对文件进行加载,并且指定类型(mimetype)和编码类型(textEncodingName)

一、UIWebView加载.html网页文件(loadRequest)

以下代码都放在viewDidLoad方法体里:

1、加载网络html文件:

         NSURL *url = [NSURL URLWithString:@"http://localhost:8080/jmDemo/index.html"]; //@"http//:www.baidu.com"

          NSURLRequest *request = [NSURLRequest requestWithURL:url];

          [_webView loadRequest:request];

2、加载本地html文件,在iphone项目里面

      NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];

       NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]];

      [_webView loadRequest:request];

3、加载本地html文件,不在iphone项目里面,在Documents文件夹里

            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

           NSString *documentsDirectory = [paths objectAtIndex:0];

           NSString *path = [documentsDirectory stringByAppendingPathComponent:@"index.html"];

           NSURL *url = [NSURL fileURLWithPath:path];

            NSURLRequest *request = [NSURLRequest requestWithURL:url];

             [_webView loadRequest:request];

附加 加载pdf格式

       NSURL *url =[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"f5_newspaper" ofType:@"pdf"]];

        NSURLRequest *request = [NSURLRequest requestWithURL:url];

          [_webView loadRequest:request];

二、loadHTMLString:baseURL:(1将本地html文件内容嵌入 2.加载HTML代码 )

(1)将本地html文件内容嵌入

      NSString *resourcePath = [[NSBundle mainBundle] resourcePath];

      NSString *filePath = [resourcePath stringByAppendingPathComponent:@"test.html"];

      NSString *htmlstring =[[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];

      [self.webView loadHTMLString:htmlstring baseURL:[NSURL fileURLWithPath: [[NSBundle mainBundle] bundlePath]]];

(2)直接加载加载HTML代码

       NSString *htmlstring = @"

诚邀享有丰富教学。

整合全球优质教学资 源。

通过科学的培训。

拥有优质食品管理人员。< /li>

提高食品行业对食品安全的认知与重视度。

< /p>"

     [self.webView loadHTMLString:htmlstring baseURL:nil];

三、 loadData:MIMEType:textEncodingName:baseURL:

(1)html内容

        NSString *string = [NSString stringWithFormat:@"%@",self.model.contentClob];

        NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];

        [webContentView loadData:data MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:nil];

(2)加载.html文件

//首先把数据写到NSData中

         NSString *pathurl = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];

        NSData *data = [NSData dataWithContentsOfFile:pathurl];

//然后设置baseURL

         NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

         NSString *documentsDir = [paths objectAtIndex:0] ;   //根据自己的具体情况设置,我的html文件在document目 录,链接也是在这个目录上开始

          NSURL *baseURL = [NSURL fileURLWithPath:documentsDir];

           [self.webView loadData:data MIMEType:@"text/html" textEncodingName:@"GBK" baseURL:baseURL];

四 、其他属性及常用代理

           webContentView.scalesPageToFit = YES;//让web content布局适应webView    

webContentView.delegate = self;

         #pragma mark - webView代理方法

    /**

     *  webView开始发送请求的时候就会调用

     */

- (void)webViewDidStartLoad:(UIWebView *)webView

{

// 显示提醒框

[MBProgressHUD showMessage:@"哥正在帮你加载中..."];

}

/**

*  webView请求完毕的时候就会调用

*/

- (void)webViewDidFinishLoad:(UIWebView *)webView

{

// 隐藏提醒框

[MBProgressHUD hideHUD];

}

/**

*  webView请求失败的时候就会调用

*/

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

{

// 隐藏提醒框

[MBProgressHUD hideHUD];

}

/**

*  当webView发送一个请求之前都会先调用这个方法, 询问代理可不可以加载这个页面(请求)

*

*  @return YES : 可以加载页面,  NO : 不可以加载页面

*/

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType(最主要的代理方法, 用于截取webView每次跳转, 可以根据两个参数判,断是否跳转到正常的web页面还是跳转到自己写的原生页面)

{

@param request : The content location(请求)

@param navigationType : The type of user acti, on that started the load request(跳转类型详细看下面)

UIWebViewNavigationTypeLinkClicked, 用户触击了一个链接。

UIWebViewNavigationTypeFormSubmitted, 用户提交了一个表单。

UIWebViewNavigationTypeBackForward, 用户触击前进或返回按钮。

UIWebViewNavigationTypeReload, 用户触击重新加载的按钮。

UIWebViewNavigationTypeFormResubmitted, 用户重复提交表单

UIWebViewNavigationTypeOther, 发生其它行为。

if (写判断) {

// 不加载这个请求

return NO;

}

return YES;

}

iOS7之后JavaScript与Objective-C之间的通信 - CocoaChina_让移动开发更简单 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • IOS之UIWebView的使用 刚接触IOS开发1年多,现在对于 混合式 移动端开发越来越流行,因为开发成本上、...
    学无止境666阅读 45,770评论 5 53
  • http://www.cnblogs.com/mddblog/p/5281748.html 一、整体介绍 UIWe...
    F麦子阅读 1,212评论 0 2
  • OS之UIWebView的使用 刚接触IOS开发1年多,现在对于 混合式 移动端开发越来越流行,因为开发成本上、速...
    知之未道阅读 1,652评论 0 4
  • 开发中一些界面如果使用OC代码进行编写会十分复杂,我们经常会使用到webView来呈现一个事先用HTML编写好的网...
    ShenYj阅读 641评论 0 3
  • 就像我,可能兜来兜去又回到了最初的起点。 我们都有年少时候的梦想,有一个我们内心世界,那个世界里有一个这样的世界,...
    吴直发阅读 262评论 0 0