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
转载于:https://www.cnblogs.com/lohcve/p/4731618.html
iOS中基于WebView的HTML网页离线访问技术的实现相关推荐
- android动态设置错误页面,Android中替换WebView加载网页失败时的页面
我们用webView去请求一个网页链接的时候,如果请求网页失败或无网络的情况下,它会返回给我们这样一个页面,如下图所示: 上面这个页面就是系统自带的页面,你觉得是不是很丑?反正小编本人觉得非常丑,很难 ...
- 小程序中使用web-view链接H5网页
##加粗样式小程序中使用web-view链接H5网页 1.小程序中,封装统一的接口请求方法(以便在每个接口中都携带 cookie,放在 header 中):const request = parame ...
- 安卓基于webview混合开发之离线模式
1.背景 基于业务需要,在移动端需要在无网络环境下完成某些业务操作,然后回到有网络的区域将数据传送到后台,开发模式还是基于webview的混合开发,即界面操作都是由前端代码实现,共用一套后台接口. 所 ...
- Linux中基于同一IP的不同端口访问不同的网站,也可以通过域名去访问
作业a 基于同一IP的不同端口访问不同的网站(可以通过域名去访问) ip+port1 -> 对应一个域名 ip+port2 -> 对应一个域名 使用域名1我应该访问到 ip+port1对应 ...
- UNI-APP在自定义组件中内嵌H5/Html网页,可自定义webview大小,加载不闪屏
问题描述: UNI-APP在自定义组件中内嵌H5/Html网页时,通过内置组件 web-view 实现(如下),发现会自动铺满整个页面,不可控制大小(默认充满屏幕不可控制大小) <web-vie ...
- 基于vue-cli的微信网页开发中的js-sdk的使用
参考文档:微信公众平台.踩坑记录 一.简介 JS-SDK需要向服务端获取签名,且获取签名中需要的参数包括所在页面的url,但由于单页应用的路由特殊,其中涉及到iOS和android微信客户端浏览器内核 ...
- 根据两个经纬度点调用百度地图应用查询路线 适用android或者ios中及网页浏览(手机网页同样适用)
Intent intent = null;try {// 如果有安装百度地图 就启动百度地图StringBuffer sbs = new StringBuffer();sbs.append(" ...
- 使用Android stdio中的Webview显示网页时提示net::err_access_denied是为什么?
已经解决,方法是在webview中加入如下代码 //解决网页不显示的代码webview.setWebViewClient(new WebViewClient() {@Overridepublic bo ...
- 实践:uniapp中webview内置网页与app实时通讯
目录 1.uniapp官网webview地址 2.uniapp中vue文件代码 3.webview链接的远程网页代码 4.vue引入uniapp的JS 5.到此uniapp使用webview内置网页与 ...
- ios 中的小技巧 - 总有你想要的 一
UITableView的Group样式下顶部空白处理 在viewWillAppear里面添加如下代码: //分组列表头部空白处理 CGRect frame = myTableView.tableHea ...
最新文章
- python001 一,Python 入门技巧、Python概述及环境准备
- C++并查集Disjoint Set(附完整源码)
- 字符输出流的基本使用_写出单个字符到文件
- shell脚本详解(八)——一键部署自动化装机(PXE无人值守)
- 各大厂抢招WPF,小米这回是下了血本啊...
- 9.VMware vsphere 5.0新体验-新增功能
- Android 8.0 学习(13)---开发者 FAQ
- 女人用一辈子承诺一句话
- 谷歌拼音输入法快速切换中英文解决中英文混合打字问题
- 笔试题--你准备好了吗
- [SHELL进阶] (转)最牛B的 Linux Shell 命令 (三)
- 计算机考研复试——计算机前沿知识篇
- PCB 设计的基本流程
- mysql中 怎么插入反斜杠_MySQL中如何插入反斜杠,反斜杠被吃掉,反斜杠转义(转)...
- Aviary 图片编辑
- Uncaught TypeError: Cannot read property 'decimalSeparator' of undefined
- 华人小哥打造乔布斯版ChatGPT,网友:感觉他复活了
- 学会Redis缓存中间件,这一篇就够了
- 键盘 Key Code对照表
- Windows下nginx启动报错黑屏(1113: No mapping for the Unicode character exists in the target......