其实就是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

转载于:https://www.cnblogs.com/lohcve/p/4731618.html

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

  1. android动态设置错误页面,Android中替换WebView加载网页失败时的页面

    我们用webView去请求一个网页链接的时候,如果请求网页失败或无网络的情况下,它会返回给我们这样一个页面,如下图所示: 上面这个页面就是系统自带的页面,你觉得是不是很丑?反正小编本人觉得非常丑,很难 ...

  2. 小程序中使用web-view链接H5网页

    ##加粗样式小程序中使用web-view链接H5网页 1.小程序中,封装统一的接口请求方法(以便在每个接口中都携带 cookie,放在 header 中):const request = parame ...

  3. 安卓基于webview混合开发之离线模式

    1.背景 基于业务需要,在移动端需要在无网络环境下完成某些业务操作,然后回到有网络的区域将数据传送到后台,开发模式还是基于webview的混合开发,即界面操作都是由前端代码实现,共用一套后台接口. 所 ...

  4. Linux中基于同一IP的不同端口访问不同的网站,也可以通过域名去访问

    作业a 基于同一IP的不同端口访问不同的网站(可以通过域名去访问) ip+port1 -> 对应一个域名 ip+port2 -> 对应一个域名 使用域名1我应该访问到 ip+port1对应 ...

  5. UNI-APP在自定义组件中内嵌H5/Html网页,可自定义webview大小,加载不闪屏

    问题描述: UNI-APP在自定义组件中内嵌H5/Html网页时,通过内置组件 web-view 实现(如下),发现会自动铺满整个页面,不可控制大小(默认充满屏幕不可控制大小) <web-vie ...

  6. 基于vue-cli的微信网页开发中的js-sdk的使用

    参考文档:微信公众平台.踩坑记录 一.简介 JS-SDK需要向服务端获取签名,且获取签名中需要的参数包括所在页面的url,但由于单页应用的路由特殊,其中涉及到iOS和android微信客户端浏览器内核 ...

  7. 根据两个经纬度点调用百度地图应用查询路线 适用android或者ios中及网页浏览(手机网页同样适用)

    Intent intent = null;try {// 如果有安装百度地图 就启动百度地图StringBuffer sbs = new StringBuffer();sbs.append(" ...

  8. 使用Android stdio中的Webview显示网页时提示net::err_access_denied是为什么?

    已经解决,方法是在webview中加入如下代码 //解决网页不显示的代码webview.setWebViewClient(new WebViewClient() {@Overridepublic bo ...

  9. 实践:uniapp中webview内置网页与app实时通讯

    目录 1.uniapp官网webview地址 2.uniapp中vue文件代码 3.webview链接的远程网页代码 4.vue引入uniapp的JS 5.到此uniapp使用webview内置网页与 ...

  10. ios 中的小技巧 - 总有你想要的 一

    UITableView的Group样式下顶部空白处理 在viewWillAppear里面添加如下代码: //分组列表头部空白处理 CGRect frame = myTableView.tableHea ...

最新文章

  1. python001 一,Python 入门技巧、Python概述及环境准备
  2. C++并查集Disjoint Set(附完整源码)
  3. 字符输出流的基本使用_写出单个字符到文件
  4. shell脚本详解(八)——一键部署自动化装机(PXE无人值守)
  5. 各大厂抢招WPF,小米这回是下了血本啊...
  6. 9.VMware vsphere 5.0新体验-新增功能
  7. Android 8.0 学习(13)---开发者 FAQ
  8. 女人用一辈子承诺一句话
  9. 谷歌拼音输入法快速切换中英文解决中英文混合打字问题
  10. 笔试题--你准备好了吗
  11. [SHELL进阶] (转)最牛B的 Linux Shell 命令 (三)
  12. 计算机考研复试——计算机前沿知识篇
  13. PCB 设计的基本流程
  14. mysql中 怎么插入反斜杠_MySQL中如何插入反斜杠,反斜杠被吃掉,反斜杠转义(转)...
  15. Aviary 图片编辑
  16. Uncaught TypeError: Cannot read property 'decimalSeparator' of undefined
  17. 华人小哥打造乔布斯版ChatGPT,网友:感觉他复活了
  18. 学会Redis缓存中间件,这一篇就够了
  19. 键盘 Key Code对照表
  20. Windows下nginx启动报错黑屏(1113: No mapping for the Unicode character exists in the target......

热门文章

  1. 海尔智能微型计算机,微型计算机 Microcomputers
  2. scala case class入门
  3. Linux环境下编写C程序
  4. EMC混合云解决方案Enterprise Hybrid Cloud升级
  5. 关于突然不能上网的问题的解决
  6. Teradata中的四舍五入问题
  7. 【spring bean】bean的配置和创建方式
  8. Linux 【系统知识】 - Cgroup 初步了解
  9. galileo 汉化
  10. WCF分布式开发常见错误解决(1):添加服务引用出错