iOS中基于WebView的HTML网页离线访问技术的实现

其实就是MVC模式,视图在在线、离线时可以共用,控制器在在线时是由服务器端实现的,而离线时则是由本地Obj-C代码实现。具体实现方式为采用Mongoose实现。

代码为:

mongoose.h

mongoose.c

附件

http://files.cnblogs.com/files/lohcve/Mongoose.zip

调用方式:

HttpServer.h

 1 //
 2 //  NSObject+HttpServer.h
 3 //  sxypt
 4 //
 5 //  Created by 李 泽波 on 13-1-9.
 6 //  Copyright (c) 2013年 xxx有限公司. All rights reserved.
 7 //
 8
 9 #import <Foundation/Foundation.h>
10 #import "mongoose.h"
11
12 @interface HttpServer : NSObject
13 {
14     struct mg_context *MG_CTX;//http server
15 }
16
17 @property struct mg_context *MG_CTX;
18
19 - (void)http_server_start;
20 - (void)http_server_stop;
21 - (void)test_http_server;
22
23 @end

HttpServer.m

 1 //
 2 //  NSObject+HttpServer.m
 3 //  sxypt
 4 //
 5 //  Created by 李 泽波 on 13-1-9.
 6 //  Copyright (c) 2013年 xxx有限公司. All rights reserved.
 7 //
 8
 9 #import "HttpServer.h"
10 #import "Constant.h"
11
12 @implementation HttpServer
13
14 @synthesize MG_CTX;
15
16 - (id) initHttpServer
17 {
18     self = [super init];
19     if(self){
20
21     }
22     return self;
23 }
24
25 - (void)http_server_start
26 {
27     NSString *path = [NSString stringWithFormat:@"%@%@", [[NSBundle mainBundle] resourcePath], OfflineWebRootPath];
28     char *rootPath = (char *)[path UTF8String];
29     char *serverPort = (char *)[OfflineWebServerPort UTF8String];
30     const char *options[] = {
31         "document_root", rootPath,
32         "listening_ports", serverPort,
33         NULL
34     };
35     self.MG_CTX = mg_start(&callback, NULL, options);
36     NSLog(@"http server start at port: %@", OfflineWebServerPort);
37 }
38
39 - (void)http_server_stop
40 {
41     mg_stop(self.MG_CTX);
42     NSLog(@"http server stoped");
43 }
44
45 - (void)test_http_server
46 {
47     NSString *urlString = [NSString stringWithFormat:@"%@:%@%@", OfflineWebServer, OfflineWebServerPort, @"/index.html"];
48     NSURL *url = [NSURL URLWithString:urlString];
49     NSString *response = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
50     NSLog(@"%@", response);
51 }
52
53 void *callback(enum mg_event event, struct mg_connection *conn)
54 {
55     const struct mg_request_info *request_info = mg_get_request_info(conn);
56
57     if (event == MG_NEW_REQUEST) {
58         char content[1024];
59         int content_length = snprintf(content, sizeof(content),
60                                       "Hello from mongoose! Remote port: %d",
61                                       request_info->remote_port);
62         mg_printf(conn,
63                   "HTTP/1.1 200 OK\r\n"
64                   "Content-Type: text/plain\r\n"
65                   "Content-Length: %d\r\n"        // Always set Content-Length
66                   "\r\n"
67                   "%s",
68                   content_length, content);
69         // Mark as processed
70         return "";
71     } else {
72         return NULL;
73     }
74 }
75
76 @end
时间: 2024-10-10 14:22:39

iOS中基于WebView的HTML网页离线访问技术的实现的相关文章

iOS中基于协议的路由设计

一.背景 前段时间对我们自己的App做了结构上的重构,抛弃了之前简单的MVC开发模式,原因是随着App的业务线越来越多,单个页面的功能越来越复杂,MVC开发模式导致整个Controller-layer的代码越来越多.本文将分享重构中的Router模块. 使用路由模式可以解决我们项目中页面与页面之间的耦合(因为我们App是视图生命周期作为驱动,所以这里说是页面,实际是控制器层),因为一个页面功能太多就会引入过多的类,往往会造成import过多,不好管理.而且iOS中执行界面跳转的时候,很容易产生模

小程序中的web-view与h5网页之间的交互

官方文档:https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html web-view 基础库 1.6.4 开始支持,低版本需做兼容处理 web-view 组件是一个可以用来承载网页的容器,会自动铺满整个小程序页面.个人类型与海外类型的小程序暂不支持使用. 客户端 6.7.2 版本开始,navigationStyle: custom 对 <web-view> 组件无效 属性名 类型 默认值 说明 src St

iOS中基于 Socket 的 C/S 结构网络通信(中)

结合上一篇的知识,接下来将介绍基于 TCP 协议的 Socket  编程:由于 Socket 需要有客户端和服务端,那么现在实现的是关于服务端的简单程序.服务端采用的是CFStream 类来实现的.      这个服务端是把Xcode中的 Command Line Tool 来作为服务端的:当然,你也可以把 iPhone 作为服务端,但是要利用其他的框架,比如 AsyncSocket (https://github.com/roustem/AsyncSocket) ,里面有分为 UDP 和 TC

iOS中的webView加载HTML

在日常开发中,我们为了效率会用到很多很多的WebView,比如在做某个明细页面的时候我们返回给你的可能是一个html字符串,我们就需要将当前字符串展示到webView上面,所以我们对HTML标签需要有一定的认识,下面我们来一起用html标签和JS写一个打地鼠游戏,这里我们主要讲解HTML标签的书写,只要如何和webView适配涉及到响应式布局我们下次讲解: 1.首先我们先新建一个html文件 2 完整html标签并且设置编码格式为UTF-8 3 在body里面增加十只老鼠图片,并且增加点击事件,

iOS 中基于Socket 的 C/S 结构的网络通信(下)

上一篇实现了简单的 Server 端程序,服务端通过 void WriteStreamClientCallBack(CFWriteStreamRef stream, CFStreamEventType eventType, void* clientCallBackInfo) 函数向客户端发送"你好,客户端!"的消息,如果客户端接收成功的话就会显示"你好,客户端!":需要显示服务端发送过来的消息,那么就需要定义一个UILabel输出口(IBOutlet)来显示消息:客

iOS中 基于LBXScan库二维码扫描 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博 首先声明这个二维码扫描是借助于zxing. 功能模块都完全封装好了,不过界面合你口味,直接使用就好,如果不合口味,后面告诉你怎么修改. - 1.cocoaPods导入pod 'LBXScan', '~> 1.1.1' 导入方法看这: - 2.将JQScan文件夹拖到你的工程中(这个是写好的). <code class="language-Objective-C hljs objectivec has-

ios 中清除webView的缓存

在UIWebView下,可以使用 [[NSURLCache sharedURLCache] removeAllCachedResponses];//清除缓存 来实现清除缓存,但当替换使用WKWebView后,这个方法并不生效了(据说WKWebView不支持,我没找到官方说法-) 不过寻找了一下解决方法,分享一下 --------------IOS9以上---------------- WKWebsiteDataStore *dateStore = [WKWebsiteDataStore defa

iOS中 轮播图放哪最合适? 技术分享

我们知道,轮播图放在cell或collectionViewCell上会影响用户层级交互事件,并且实现起来比较麻烦,现在推出一个技术点:答题思路是:将UIScrollView放在UIView或UICollectionView或者UITableView上,将UIScrollView的y设为需要的大小,加载在你的现有图层上,然后改变偏移量即可,具体如下: 效果如下: 代码如下: 以UICollectionView为例 //表头可以做轮播图 UIScrollView *scrollView = [[UI

iOS开发之WebView

做iOS的应用也有一段时间了,在之前的demo中一直没有机会用到WebView,今天就查缺补漏一下,使用一下WebView.最早接触WebView是在Android中接触的,iOS中的WebView的用法也是挺简单的.本篇博客没有什么高深的技术,只是对webView的应用.从字面意思可以看出WebView就是用来加载网页的视图,和手机上的浏览器类似. 1.之前用storyboard拖控件时只是看着WebView在哪里静静的躺着(如下图所示),一直没有用过,如果想使用的话也很简单,就是把web v