iOS中基于WebView的HTML网页离线访问技术的实现
其实就是MVC模式,视图在在线、离线时可以共用,控制器在在线时是由服务器端实现的,而离线时则是由本地Obj-C代码实现。具体实现方式为采用Mongoose实现。
代码为:
mongoose.h
mongoose.c
附件
http://files.cnblogs.com/files/lohcve/Mongoose.zip
调用方式:
HttpServer.h
//
// NSObject+HttpServer.h
// sxypt
//
// Created by 李 泽波 on 13-1-9.
// Copyright (c) 2013年 xxx有限公司. All rights reserved.
// #import <Foundation/Foundation.h>
#import "mongoose.h" @interface HttpServer : NSObject
{
struct mg_context *MG_CTX;//http server
} @property struct mg_context *MG_CTX; - (void)http_server_start;
- (void)http_server_stop;
- (void)test_http_server; @end
HttpServer.m
//
// NSObject+HttpServer.m
// sxypt
//
// Created by 李 泽波 on 13-1-9.
// Copyright (c) 2013年 xxx有限公司. All rights reserved.
// #import "HttpServer.h"
#import "Constant.h" @implementation HttpServer @synthesize MG_CTX; - (id) initHttpServer
{
self = [super init];
if(self){ }
return self;
} - (void)http_server_start
{
NSString *path = [NSString stringWithFormat:@"%@%@", [[NSBundle mainBundle] resourcePath], OfflineWebRootPath];
char *rootPath = (char *)[path UTF8String];
char *serverPort = (char *)[OfflineWebServerPort UTF8String];
const char *options[] = {
"document_root", rootPath,
"listening_ports", serverPort,
NULL
};
self.MG_CTX = mg_start(&callback, NULL, options);
NSLog(@"http server start at port: %@", OfflineWebServerPort);
} - (void)http_server_stop
{
mg_stop(self.MG_CTX);
NSLog(@"http server stoped");
} - (void)test_http_server
{
NSString *urlString = [NSString stringWithFormat:@"%@:%@%@", OfflineWebServer, OfflineWebServerPort, @"/index.html"];
NSURL *url = [NSURL URLWithString:urlString];
NSString *response = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@", response);
} void *callback(enum mg_event event, struct mg_connection *conn)
{
const struct mg_request_info *request_info = mg_get_request_info(conn); if (event == MG_NEW_REQUEST) {
char content[];
int content_length = snprintf(content, sizeof(content),
"Hello from mongoose! Remote port: %d",
request_info->remote_port);
mg_printf(conn,
"HTTP/1.1 200 OK\r\n"
"Content-Type: text/plain\r\n"
"Content-Length: %d\r\n" // Always set Content-Length
"\r\n"
"%s",
content_length, content);
// Mark as processed
return "";
} else {
return NULL;
}
} @end
iOS中基于WebView的HTML网页离线访问技术的实现的更多相关文章
- android中使用WebView请求本地网页
使用WebView的方式请参考我的上一篇文章:android中使用WebView请求网页 这里说一下请求本地网页的方法: 本地网页应该把网页保存在src/main/assets目录下: webView ...
- iOS中基于协议的路由设计
一.背景 前段时间对我们自己的App做了结构上的重构,抛弃了之前简单的MVC开发模式,原因是随着App的业务线越来越多,单个页面的功能越来越复杂,MVC开发模式导致整个Controller-layer ...
- 小程序中的web-view与h5网页之间的交互
官方文档:https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html web-view 基础库 1.6.4 开始支 ...
- iOS中的webView加载HTML
在日常开发中,我们为了效率会用到很多很多的WebView,比如在做某个明细页面的时候我们返回给你的可能是一个html字符串,我们就需要将当前字符串展示到webView上面,所以我们对HTML标签需要有 ...
- iOS中基于 Socket 的 C/S 结构网络通信(中)
结合上一篇的知识.接下来将介绍基于 TCP 协议的 Socket 编程.因为 Socket 须要有client和服务端,那么如今实现的是关于服务端的简单程序.服务端採用的是CFStream 类来实现 ...
- iOS中 基于LBXScan库二维码扫描 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 首先声明这个二维码扫描是借助于zxing. 功能模块都完全封装好了,不过界面合你口味,直接使用就好,如果不合口味,后 ...
- ios 中清除webView的缓存
在UIWebView下,可以使用 [[NSURLCache sharedURLCache] removeAllCachedResponses];//清除缓存 来实现清除缓存,但当替换使用WKWebVi ...
- iOS中 轮播图放哪最合适? 技术分享
我们知道,轮播图放在cell或collectionViewCell上会影响用户层级交互事件,并且实现起来比较麻烦,现在推出一个技术点:答题思路是:将UIScrollView放在UIView或UICol ...
- iOS开发之WebView
做iOS的应用也有一段时间了,在之前的demo中一直没有机会用到WebView,今天就查缺补漏一下,使用一下WebView.最早接触WebView是在Android中接触的,iOS中的WebView的 ...
随机推荐
- 【转载】MSDN-MDX#001 - 多维表达式 (MDX) 参考
摘录于MSDN MDX 的一些重要概念 1. MDX 介绍 多维表达式 (MDX) 是用于在 Microsoft SQL Server Analysis Services (SSAS) 中处理和检索多 ...
- 02-url路由分配及模板渲染方式
本章主要内容 1.url基本概念及格式 2.path和re_path 3.模板路径配置 4.模板渲染方式 1.url基本概念及格式 URL(uniform Resoure Locator)统一资源定位 ...
- Hangfire JobStorage.Current property value has not been initialized
app.UseHangfireServer() 放到 app.UseAbp() 前面 作者: zhaok 出处: http://dotnetmonkey.cnblogs.com/
- Linux网络编程案例分析
本代码来自于博主:辉夜星辰 本篇主要对运行代码中出现的问题进行分析,代码本身的内容后续展开讨论. 服务器端代码 /* Linux网络编程之TCP编程,服务器端读数据 socket函数之后,返回值ser ...
- Service Discovery protocol(SDP)
locating services provided by Volume 3 , Part C , section 8 2.1sdp client-server architecture 2.2 se ...
- webpack/gulp的z-index被改写
webpack方法 new OptimizeCSSPlugin({ cssProcessorOptions: { safe: true } }) gulp-cssnano 方法 .pipe(cssna ...
- Unity3D实现随机播放背景音频
1.先在第一人称下新建空白物体,命名“audio” 2.在audio中加入Audio Source 3.在第一人称组件里添加Audio Liistener和Audio脚本 4.脚本中添加代码 usin ...
- JDBC处理可滚动的处理集
Statement createStatement(int resultSetType, int resultSetConcurrency, ...
- 关系型数据库MySQL多实例
简介 MySQL数据库是一个中小型关系型数据库管理系统,软件开发者为瑞典MySQL AB公司.在2008年1月16号被Sun公司收购后Sun公司又被oracle公司收购.目前MySQL被广泛地应用在I ...
- JVM的监控命令
JVM监控命令基本就是 jps.jstack.jmap.jhat.jstat 几个命令的使用就可以了 JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外 ...