Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
陈高翔
/
DreamSleep-iOS
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 5a104512
由
cgx
编写于
2022-07-04 15:21:34 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
处理H5页面加载服务器404、502错误
1 个父辈
a4f46392
显示空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
147 行增加
和
30 行删除
DreamSleep/DreamSleep/Basement/H5/DsWebController.h
DreamSleep/DreamSleep/Basement/H5/DsWebController.m
DreamSleep/DreamSleep/Basement/H5/ExceptionDefaultView.h
DreamSleep/DreamSleep/Basement/H5/ExceptionDefaultView.m
DreamSleep/DreamSleep/Class/AISleepModule/Controller/AISleepCoachController.m
DreamSleep/DreamSleep/Resource/Assets.xcassets/Default/noData.imageset/Contents.json
DreamSleep/DreamSleep/Resource/Assets.xcassets/Default/noData.imageset/noData.png
DreamSleep/DreamSleep/Resource/Assets.xcassets/Default/noData.imageset/noData@2x.png
DreamSleep/DreamSleep/Resource/Assets.xcassets/Default/noData.imageset/noData@3x.png
DreamSleep/DreamSleep/Basement/H5/DsWebController.h
查看文件 @
5a10451
...
...
@@ -14,7 +14,7 @@ NS_ASSUME_NONNULL_BEGIN
-
(
void
)
reloadAIPage
;
@end
/// 加载H5页面控制器
/// 加载H5页面控制器
(二级页面)
@interface
DsWebController
:
UIViewController
@property
(
nonatomic
,
weak
)
id
<
DsWebControllerDelegate
>
refreshDelegate
;
...
...
DreamSleep/DreamSleep/Basement/H5/DsWebController.m
查看文件 @
5a10451
...
...
@@ -131,14 +131,21 @@
self
.
exceptionView
.
hidden
=
YES
;
if
(
self
.
isShowNavi
==
NO
)
{
self
.
dkBackBtn
.
hidden
=
YES
;
}
[
self
.
dsMaskView
display
];
self
.
webView
.
hidden
=
NO
;
self
.
webView
.
hidden
=
!
self
.
exceptionView
.
hidden
;
[
self
serverErrorDeal
];
}
// 页面加载失败时调用
-
(
void
)
webView
:
(
WKWebView
*
)
webView
didFailProvisionalNavigation
:
(
WKNavigation
*
)
navigation
withError
:
(
NSError
*
)
error
{
[[
UIApplication
sharedApplication
]
setNetworkActivityIndicatorVisible
:
NO
];
DSLog
(
@"加载失败:%@"
,
error
.
userInfo
);
self
.
exceptionView
.
hidden
=
NO
;
if
(
self
.
isShowNavi
==
NO
)
{
self
.
dkBackBtn
.
hidden
=
NO
;
}
[
self
wkErrorDeal
];
}
// 提交发生错误时调用
-
(
void
)
webView
:
(
WKWebView
*
)
webView
didFailNavigation
:
(
WKNavigation
*
)
navigation
withError
:
(
NSError
*
)
error
{
DSLog
(
@"提交失败:%@"
,
error
.
userInfo
);
[
self
wkErrorDeal
];
}
// 内存不足出现白屏问题
...
...
@@ -150,6 +157,32 @@
[
DataStatisticsUtil
reportExceptionWithName
:
H5Monitor
reason
:
@"webViewWebContentProcessDidTerminate"
stackTrace
:
@[
url
]];
}
#pragma mark - 错误处理
-
(
void
)
wkErrorDeal
{
[[
UIApplication
sharedApplication
]
setNetworkActivityIndicatorVisible
:
NO
];
self
.
exceptionView
.
hidden
=
NO
;
self
.
webView
.
hidden
=
!
self
.
exceptionView
.
hidden
;
if
(
self
.
isShowNavi
==
NO
)
{
self
.
dkBackBtn
.
hidden
=
NO
;
}
}
-
(
void
)
serverErrorDeal
{
// 网页加载成功了,处理服务器常见错误
NSURLSessionTask
*
datatask
=
[[
NSURLSession
sharedSession
]
dataTaskWithRequest
:
self
.
request
completionHandler
:
^
(
NSData
*
_Nullable
data
,
NSURLResponse
*
_Nullable
response
,
NSError
*
_Nullable
error
)
{
NSHTTPURLResponse
*
httpResponse
=
(
NSHTTPURLResponse
*
)
response
;
DSLog
(
@"statusCode:%ld, error:%@, info:%@"
,
httpResponse
.
statusCode
,
error
,
[
NSHTTPURLResponse
localizedStringForStatusCode
:
httpResponse
.
statusCode
]);
if
(
httpResponse
.
statusCode
==
404
||
httpResponse
.
statusCode
==
502
)
{
dispatch_async
(
dispatch_get_main_queue
(),
^
{
self
.
exceptionView
.
hidden
=
NO
;
if
(
self
.
isShowNavi
==
NO
)
{
self
.
dkBackBtn
.
hidden
=
NO
;
}
self
.
webView
.
hidden
=
!
self
.
exceptionView
.
hidden
;
[
self
.
exceptionView
showServerErrInfo
:[
NSHTTPURLResponse
localizedStringForStatusCode
:
httpResponse
.
statusCode
]];
});
}
}];
[
datatask
resume
];
}
#pragma mark - WKScriptMessageHandler
-
(
void
)
userContentController
:
(
WKUserContentController
*
)
userContentController
didReceiveScriptMessage
:
(
WKScriptMessage
*
)
message
{
if
([
message
.
name
isEqualToString
:
@"AppModel"
])
{
...
...
DreamSleep/DreamSleep/Basement/H5/ExceptionDefaultView.h
查看文件 @
5a10451
...
...
@@ -11,8 +11,9 @@ NS_ASSUME_NONNULL_BEGIN
// 异常处理类型
typedef
NS_ENUM
(
NSInteger
,
ExceptionType
)
{
ExceptionTypeNet
,
ExceptionTypeSmall
ExceptionTypeNet
,
// 网络异常
ExceptionTypeSmall
,
// 小页面网络异常
ExceptionTypeNoData
// 无数据
};
// 处理事件回调
...
...
@@ -23,6 +24,10 @@ typedef void (^DealBlock)(void);
-
(
instancetype
)
initWithType
:(
ExceptionType
)
type
block
:(
DealBlock
)
block
superView
:(
UIView
*
)
superView
;
-
(
void
)
updateExceptionViewWithType
:(
ExceptionType
)
type
;
-
(
void
)
showServerErrInfo
:(
NSString
*
)
errInfo
;
@end
NS_ASSUME_NONNULL_END
DreamSleep/DreamSleep/Basement/H5/ExceptionDefaultView.m
查看文件 @
5a10451
...
...
@@ -28,49 +28,59 @@
[
self
addSubview
:
self
.
exceptLab
];
[
self
addSubview
:
self
.
dealBtn
];
if
(
type
==
ExceptionTypeNet
)
{
[
self
addSubview
:
self
.
exceptionIV
];
if
(
type
==
ExceptionTypeSmall
)
{
[
self
mas_makeConstraints
:
^
(
MASConstraintMaker
*
make
)
{
make
.
left
.
right
.
equalTo
(
superView
);
make
.
center
.
equalTo
(
superView
);
}];
[
self
.
exceptionIV
mas_makeConstraints
:
^
(
MASConstraintMaker
*
make
)
{
make
.
centerX
.
equalTo
(
self
);
make
.
top
.
equalTo
(
self
);
make
.
top
.
left
.
bottom
.
right
.
equalTo
(
superView
);
}];
[
self
.
exceptLab
mas_makeConstraints
:
^
(
MASConstraintMaker
*
make
)
{
make
.
centerX
.
equalTo
(
self
);
make
.
left
.
equalTo
(
self
).
offset
(
5
);
make
.
right
.
equalTo
(
self
).
offset
(
-
5
);
make
.
top
.
equalTo
(
self
.
exceptionIV
.
mas_bottom
).
offset
(
42
);
make
.
centerY
.
equalTo
(
self
).
offset
(
-
30
);
}];
[
self
.
dealBtn
mas_makeConstraints
:
^
(
MASConstraintMaker
*
make
)
{
make
.
centerX
.
equalTo
(
self
);
make
.
size
.
mas_equalTo
(
CGSizeMake
(
155
,
40
));
make
.
top
.
equalTo
(
self
.
exceptLab
.
mas_bottom
).
offset
(
42
);
make
.
bottom
.
equalTo
(
self
).
offset
(
-
30
);
make
.
centerY
.
equalTo
(
self
).
offset
(
30
);
}];
}
else
if
(
type
==
ExceptionTypeSmall
)
{
}
else
{
[
self
addSubview
:
self
.
exceptionIV
];
[
self
mas_makeConstraints
:
^
(
MASConstraintMaker
*
make
)
{
make
.
top
.
left
.
bottom
.
right
.
equalTo
(
superView
);
make
.
left
.
right
.
equalTo
(
superView
);
make
.
center
.
equalTo
(
superView
);
}];
[
self
.
exceptionIV
mas_makeConstraints
:
^
(
MASConstraintMaker
*
make
)
{
make
.
centerX
.
equalTo
(
self
);
make
.
top
.
equalTo
(
self
);
}];
[
self
.
exceptLab
mas_makeConstraints
:
^
(
MASConstraintMaker
*
make
)
{
make
.
centerX
.
equalTo
(
self
);
make
.
left
.
equalTo
(
self
).
offset
(
5
);
make
.
right
.
equalTo
(
self
).
offset
(
-
5
);
make
.
centerY
.
equalTo
(
self
).
offset
(
-
30
);
make
.
top
.
equalTo
(
self
.
exceptionIV
.
mas_bottom
).
offset
(
42
);
}];
[
self
.
dealBtn
mas_makeConstraints
:
^
(
MASConstraintMaker
*
make
)
{
make
.
centerX
.
equalTo
(
self
);
make
.
size
.
mas_equalTo
(
CGSizeMake
(
155
,
40
));
make
.
centerY
.
equalTo
(
self
).
offset
(
30
);
make
.
top
.
equalTo
(
self
.
exceptLab
.
mas_bottom
).
offset
(
42
);
make
.
bottom
.
equalTo
(
self
).
offset
(
-
30
);
}];
}
}
return
self
;
}
-
(
void
)
updateExceptionViewWithType
:(
ExceptionType
)
type
{
self
.
exceptionIV
.
image
=
[
UIImage
imageNamed
:[
self
getExceptionImgWithType
:
type
]];
self
.
exceptLab
.
text
=
[
self
getExceptionInfoWithType
:
type
];
[
self
.
dealBtn
setTitle
:[
self
getDealBtnTitleWithType
:
self
.
type
]
forState
:
UIControlStateNormal
];
}
-
(
void
)
showServerErrInfo
:(
NSString
*
)
errInfo
{
self
.
exceptLab
.
text
=
(
errInfo
&&
[
errInfo
isKindOfClass
:[
NSString
class
]])
?
errInfo
:
@"服务器异常"
;
}
#pragma mark - Actions
-
(
void
)
dealAction
{
if
(
self
.
dealBlock
)
{
self
.
dealBlock
();
}
...
...
@@ -79,7 +89,7 @@
#pragma mark - lazy
-
(
UIImageView
*
)
exceptionIV
{
if
(
!
_exceptionIV
)
{
_exceptionIV
=
[[
UIImageView
alloc
]
initWithImage
:[
UIImage
imageNamed
:
@"netDefault"
]];
_exceptionIV
=
[[
UIImageView
alloc
]
initWithImage
:[
UIImage
imageNamed
:
[
self
getExceptionImgWithType
:
self
.
type
]
]];
}
return
_exceptionIV
;
}
...
...
@@ -103,12 +113,26 @@
}
#pragma mark - private
-
(
NSString
*
)
getExceptionImgWithType
:
(
ExceptionType
)
type
{
NSString
*
imgName
=
@"netDefault"
;
if
(
type
==
ExceptionTypeNet
)
{
imgName
=
@"netDefault"
;
}
else
if
(
type
==
ExceptionTypeSmall
)
{
imgName
=
@"netDefault"
;
}
else
if
(
type
==
ExceptionTypeNoData
)
{
imgName
=
@"noData"
;
}
return
imgName
;
}
-
(
NSString
*
)
getExceptionInfoWithType
:
(
ExceptionType
)
type
{
NSString
*
info
=
@""
;
if
(
type
==
ExceptionTypeNet
)
{
info
=
@"当前网络环境较差,点击刷新重新加载~"
;
}
else
if
(
type
==
ExceptionTypeSmall
)
{
info
=
@"当前网络环境较差,点击刷新重新加载~"
;
}
else
if
(
type
==
ExceptionTypeNoData
)
{
info
=
@"空空如也哦~"
;
}
return
info
;
}
...
...
@@ -119,6 +143,8 @@
title
=
@"刷新"
;
}
else
if
(
type
==
ExceptionTypeSmall
)
{
title
=
@"刷新"
;
}
else
if
(
type
==
ExceptionTypeNoData
)
{
title
=
@"重新获取"
;
}
return
title
;
}
...
...
DreamSleep/DreamSleep/Class/AISleepModule/Controller/AISleepCoachController.m
查看文件 @
5a10451
...
...
@@ -120,15 +120,21 @@
-
(
void
)
webView
:
(
WKWebView
*
)
webView
didFinishNavigation
:
(
WKNavigation
*
)
navigation
{
[[
UIApplication
sharedApplication
]
setNetworkActivityIndicatorVisible
:
NO
];
self
.
exceptionView
.
hidden
=
YES
;
self
.
aiWebView
.
hidden
=
NO
;
self
.
aiWebView
.
hidden
=
!
self
.
exceptionView
.
hidden
;
[
self
serverErrorDeal
];
}
//
加载失败
//
页面加载失败时调用
-
(
void
)
webView
:
(
WKWebView
*
)
webView
didFailProvisionalNavigation
:
(
WKNavigation
*
)
navigation
withError
:
(
NSError
*
)
error
{
[[
UIApplication
sharedApplication
]
setNetworkActivityIndicatorVisible
:
NO
];
self
.
exceptionView
.
hidden
=
NO
;
self
.
aiWebView
.
hidden
=
YES
;
DSLog
(
@"加载失败:%@"
,
error
);
DSLog
(
@"加载失败:%@"
,
error
.
userInfo
);
[
self
wkErrorDeal
];
}
// 提交发生错误时调用
-
(
void
)
webView
:
(
WKWebView
*
)
webView
didFailNavigation
:
(
WKNavigation
*
)
navigation
withError
:
(
NSError
*
)
error
{
DSLog
(
@"提交失败:%@"
,
error
.
userInfo
);
[
self
wkErrorDeal
];
}
// 内存不足出现白屏问题
...
...
@@ -140,6 +146,30 @@
[
DataStatisticsUtil
reportExceptionWithName
:
H5Monitor
reason
:
@"webViewWebContentProcessDidTerminate"
stackTrace
:
@[
url
]];
}
#pragma mark - 错误处理
-
(
void
)
wkErrorDeal
{
[[
UIApplication
sharedApplication
]
setNetworkActivityIndicatorVisible
:
NO
];
self
.
exceptionView
.
hidden
=
NO
;
self
.
aiWebView
.
hidden
=
!
self
.
exceptionView
.
hidden
;
}
-
(
void
)
serverErrorDeal
{
// 网页加载成功了,处理服务器常见错误
NSURLSessionTask
*
datatask
=
[[
NSURLSession
sharedSession
]
dataTaskWithRequest
:
self
.
request
completionHandler
:
^
(
NSData
*
_Nullable
data
,
NSURLResponse
*
_Nullable
response
,
NSError
*
_Nullable
error
)
{
NSHTTPURLResponse
*
httpResponse
=
(
NSHTTPURLResponse
*
)
response
;
DSLog
(
@"statusCode:%ld, error:%@, info:%@"
,
httpResponse
.
statusCode
,
error
,
[
NSHTTPURLResponse
localizedStringForStatusCode
:
httpResponse
.
statusCode
]);
if
(
httpResponse
.
statusCode
==
404
||
httpResponse
.
statusCode
==
502
)
{
dispatch_async
(
dispatch_get_main_queue
(),
^
{
self
.
exceptionView
.
hidden
=
NO
;
self
.
aiWebView
.
hidden
=
!
self
.
exceptionView
.
hidden
;
[
self
.
exceptionView
showServerErrInfo
:[
NSHTTPURLResponse
localizedStringForStatusCode
:
httpResponse
.
statusCode
]];
});
}
}];
[
datatask
resume
];
}
#pragma mark - WKScriptMessageHandler
-
(
void
)
userContentController
:
(
WKUserContentController
*
)
userContentController
didReceiveScriptMessage
:
(
WKScriptMessage
*
)
message
{
if
([
message
.
name
isEqualToString
:
@"AppModel"
])
{
...
...
DreamSleep/DreamSleep/Resource/Assets.xcassets/Default/noData.imageset/Contents.json
0 → 100644
查看文件 @
5a10451
{
"images"
:
[
{
"filename"
:
"noData.png"
,
"idiom"
:
"universal"
,
"scale"
:
"1x"
},
{
"filename"
:
"noData@2x.png"
,
"idiom"
:
"universal"
,
"scale"
:
"2x"
},
{
"filename"
:
"noData@3x.png"
,
"idiom"
:
"universal"
,
"scale"
:
"3x"
}
],
"info"
:
{
"author"
:
"xcode"
,
"version"
:
1
}
}
DreamSleep/DreamSleep/Resource/Assets.xcassets/Default/noData.imageset/noData.png
0 → 100644
查看文件 @
5a10451
15.0 KB
DreamSleep/DreamSleep/Resource/Assets.xcassets/Default/noData.imageset/noData@2x.png
0 → 100644
查看文件 @
5a10451
37.3 KB
DreamSleep/DreamSleep/Resource/Assets.xcassets/Default/noData.imageset/noData@3x.png
0 → 100644
查看文件 @
5a10451
70.6 KB
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论