测试已测试 | ✗ |
Lang语言 | Obj-CObjective C |
许可证 | MIT |
发布最后发布 | 2016年10月 |
Maintained by WildDylan, WildDylan.
依赖 | |
AFNetworking | >= 0 |
WebViewJavascriptBridge | >= 0 |
LKDBHelper | >= 0 |
WPZipArchive | >= 0 |
什么是 MSWebApp
:越来越多的 html 页面和框架被使用。React-native、weex、phone-gap ... 学习都会花费很多时间。但我们只需要应用中的一部分 html 页面。MSWebApp
,动态管理和挂载模块。
功能和特性
URLProtocol
钩接)。pod "MSWebApp", "~> 1.0.1"
#import <MSWebApp/MSWebApp.h>
MSWebApp
需要的信息
// FullURL: Server API path, for get the full config.
[MSWebApp webApp].fullURL = @"http://192.168.199.173:8080/webapp.json";
// Type: Seperate the difference app.
// If you have: 'Student client', 'Teacher client', you should need it.
[MSWebApp startWithType:@"MEC"];
MSWebApp webApp
的完整 URL 的响应示例,MSWebApp 框架
使用 POST 方法,服务器响应应该是这样的
{
app = {
module = (
{
mid = LeafModules;
packageurl = "http://um.devdylan.cn/LeafModules.zip";
urls = {
"classPayment.tpl" = "classPayment.html";
"detail.tpl" = "detail/detail.html";
"enter.tpl" = "index.html";
};
version = ib42;
sync = "n",
initdown = "y",
files: {
"/js/mui.js": "http://um.devdylan.cn/LeafModules/js/mui.js"
}
},
{
mid = bootstrap;
packageurl = "http://um.devdylan.cn/bootstrap.zip";
urls = {
};
version = ib43;
sync = "n",
initdown = "y",
files: {
"/js/mui.js": "http://um.devdylan.cn/LeafModules/js/mui.js"
}
},
{
mid = vueModule;
packageurl = "http://um.devdylan.cn/vueModule.zip";
urls = {
"enter.tpl" = "index.html";
};
version = "3.4.6";
sync = "y",
"initdown" = "n",
files: {}
}
);
version = "3.3.4";
};
}
使用 KVO
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(reloadData:)
name:MSWebModuleFetchOk
object:nil];
状态
/** POST on config get success, notification.object is `MSWebAppOp`*/
FOUNDATION_EXTERN NSString MS_CONST MSWebAppGetOptionSuccess;
/** POST on config get with error, notification.object is `NSError` or nil*/
FOUNDATION_EXTERN NSString MS_CONST MSWebAppGetOptionFailure;
/** POST on module start download, notification.object is `MSWebAppModule`*/
FOUNDATION_EXTERN NSString MS_CONST MSWebModuleFetchBegin;
/** POST on module downloaded or ziped with error, notification.object is `MSWebAppModule`*/
FOUNDATION_EXTERN NSString MS_CONST MSWebModuleFetchErr;
/** POST on module handler OK, notification.object is `MSWebAppModule`*/
FOUNDATION_EXTERN NSString MS_CONST MSWebModuleFetchOk;
/** POST on module mount progress changed*/
FOUNDATION_EXTERN NSString MS_CONST MSWebModuleFetchProgress;
获取浏览器实例
UIViewController * viewController = [MSWebApp instanceWithTplURL:_urlField.text];
您还可以通过 MSWebViewController
的子类自定义它。在获取实例之前必须注册它。
[MSWebApp webApp].registedClass = [SubClass class];
URL 规则
http://{[MSWebApp webApp].fullURL.host}/{ModuleId}/{URLsKey}?{query}
URLsKey,它在配置响应中是一个映射,例如使用 id
获取绝对路径。
注意:URL 映射的键,应该有后缀
.tpl
!
{
mid = vueModule;
packageurl = "http://um.devdylan.cn/vueModule.zip";
urls = {
"enter.tpl" = "index.html";
};
version = "3.4.6";
sync = "n",
initdown = "y",
files: {}
}
访问此模块中的 index.html
应使用:http://[MSWebApp webApp].fullURL.host/vueModule/enter.tpl?a=b
为什么 URL 的主机与 [MSWebApp webApp].fullURL.host 相同:建议使用独立的服务器来完成此操作。
cd Example
然后,运行 pod install
。
版本:1.0.1 可用于产品。版本:1.0.2 包含 URLProtocol、测试版,不用于生产。
依赖项:
dependency 'AFNetworking' # API Requets
dependency 'WebViewJavascriptBridge' # JS bridge
dependency 'LKDBHelper' # Model 2 DB
dependency 'WPZipArchive' # Zip, unZip
MIT。
http:/{host}/{moduleName}/{tplid}.tpl?{param}
参数 | 描述 |
---|---|
{moduleName} | mid |
{tplid} | TID(模块配置 json 中的 urls.key) |
{param} | 查询 |
{host} | 主机与配置请求 API.host 相同 |
API路径:webapp.json
参数列表
参数 | 类型 | 必须 | 描述 | |
---|---|---|---|---|
app | 字符串 | 是 | 区分产品 | |
version | 字符串 | 是 | 本地webApp版本,将自动附加。 |
如果版本参数为空,服务器应响应最新的配置。最新的配置包含所有活跃模块,MSWebApp框架将进行检查。更新、覆盖或删除。
请求数据示例
// Content-Type: application/json
app: "MEC",
version: "a4fc6"
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document test</title>
<!-- loaded public css, use relative path, All modules will in same level directory. -->
<link rel="stylesheet" type="text/css" href="../../bootstrap/css/bootstrap.css">
</head>
<body>
<form class="form-search">
<input type="text" class="input-medium search-query">
<button type="submit" class="btn btn-info">Search</button>
</form>
<button class="btn btn-large btn-block btn-primary" type="button">Block level button</button>
<button class="btn btn-large btn-block" type="button">Block level button</button>
</body>
</html>
如果模块下载失败或文件丢失,将从服务器请求。
API路径:updateModule
参数列表
参数 | 类型 | 描述 |
---|---|---|
mid | 字符串 | module ID |
version | 字符串 | 版本,有时应该是git短版本号 |
packageurl | 字符串 | 模块zip下载链接 |
urls | 对象 | 键:值 id:绝对路径 |
sync | 字符串 | sync load y/n |
initdown | 字符串 | y: 获取配置成功时下载。n: 不下载。 |
响应:
{
"message": "update success!",
"status" : "successful",
}
问题:我想在模块挂载时进入应用。回答:观察 MSWebModuleFetchOk
和 MSWebAppGetOptionSuccess
,您将首先接收到 MSWebAppGetOptionSuccess
,等待 FetchOK
,当您收到此通知时,构建一个临时数组并将其添加,当临时数组计数与 [MSWebApp webapp].op.modules 计数相同时,所有模块已成功加载。但请注意,如果模块加载失败,您应该执行某些操作。
问题:如果配置加载出错?回答:观察 MSWebAppGetOptionFailure
,执行 startWithType:
。