CNWebViewController.swift
14.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
//
// CNWebViewController.swift
// metaCode
//
// Created by zx on 2023/9/21.
//
import Foundation
import WebKit
import WebViewJavascriptBridge
import CNLiveShareToolKit
import CommonCrypto
import CNLiveBusinessTools
import SKPhotoBrowser
let WjjH5 = "wjjh5.cnlive.com"
let ManageshopH5 = "manageshop.cnlive.com"
class CNWebViewController:CNLiveBaseViewController ,WKNavigationDelegate{
var bridge:WKWebViewJavascriptBridge?
var currentUrl:String = ""//当前网页的url
lazy var webView: CNWebView = {
let configuration = WKWebViewConfiguration()
configuration.allowsInlineMediaPlayback = true
let preferences = WKPreferences()
preferences.javaScriptCanOpenWindowsAutomatically = true
preferences.javaScriptEnabled = true
configuration.preferences.minimumFontSize = 0.0
configuration.preferences = preferences
configuration.userContentController = WKUserContentController()
let webView = CNWebView(frame: CGRectMake(0, 0, Width, Height), configuration: configuration, url: _url)
// let webView = WKWebView(frame: CGRectMake(0, 0, Width, Height), configuration: configuration)
webView.cnWebView.scrollView.showsVerticalScrollIndicator = false
webView.cnWebView.scrollView.showsHorizontalScrollIndicator = false
webView.isCNWebController = true
return webView
}()
lazy var moreNavBtn: UIButton = {
let moreNavBtn = UIButton(type: .custom)
moreNavBtn.frame = CGRect(x: 0, y: KStatusBarHeight, width: KNavigationHeight-KStatusBarHeight, height: KNavigationHeight-KStatusBarHeight)
moreNavBtn.backgroundColor = .clear
moreNavBtn.setImage(UIImage(named: "web_more"), for: .normal)
moreNavBtn.addTarget(self, action: #selector(moreNavBtnAction), for: .touchUpInside)
return moreNavBtn
}()
var _url:URL?
var url:URL? {
get{
return _url
}
set{
_url = newValue!
}
}
override func viewDidLoad() {
super.viewDidLoad()
navigationBarHidden = false
self.view.addSubview(self.webView)
self.webView.webControllerUpdateNavBlock = { isFinish , title,isDecidePolicy ,urlStr in
if isFinish{
self.titleName = title
}else if isDecidePolicy{
if urlStr.contains("&isWjjReport=true") || urlStr.contains("?isWjjReport=true"){
self.rightNavBtns = [self.moreNavBtn]
self.moreNavBtn.isHidden = false
}else{
self.moreNavBtn.isHidden = true
}
}
}
webView.snp.makeConstraints { make in
make.top.equalTo(get_system_nav_height())
make.left.right.bottom.equalToSuperview()
}
// webView.cnWebView.evaluateJavaScript("navigator.userAgent") { [self] result, error in
// let userAgent = result as! String
// if error == nil && userAgent.count > 0 {
// if !userAgent.contains(CNLiveMCEnvironmentManager.shared.base_web_UA) {
// let newUserAgent = userAgent + CNLiveMCEnvironmentManager.shared.base_web_UA
// webView.cnWebView.customUserAgent = newUserAgent
//
// if (_url != nil){
// let urlStr = self.checkURLWithStr(urlStr: _url!.absoluteString)
// self.currentUrl = urlStr
//
// webView.cnWebView.load(URLRequest.init(url:URL(string: urlStr)!))
// }
// self.configBridge()
// self.configBridgeRegister()
// }
// }
// }
}
// func configBridge(){
// WKWebViewJavascriptBridge.enableLogging()
// self.bridge = WKWebViewJavascriptBridge(for: self.webView.cnWebView)
// self.bridge?.setWebViewDelegate(self)
// }
//
// func configBridgeRegister() -> Void {
// //h5拉起原生分享 js call oc
// self.bridge?.registerHandler("wjjylzgVideoShare", handler: { data, responseCallback in
//// print("js call oc\(data)")
// let dic = data as! Dictionary<String, String>
// CNLiveShareManager.showShareViewWithParam(forShareTitle: dic["title"], shareUrl: dic["shareUrl"], shareDesc: dic["subTitle"], shareImage: dic["cover"], screenFull: false, hiddenWjj: true, hiddenQQ: false, hiddenWB: true, hiddenLifeCircle: true, hiddenWechatCircle: false, hiddenWechat: false, hiddenSafari: true, formVC: self, topImage: [], topTitles: [], platformType: .all) { title in
//
// } completerBlock: { resultType, platformType, typeString in
// if resultType == .succ{
//
// }
// }
//
// })
//
// // 网页内容图片预览
// self.bridge?.registerHandler("wjjPreviewImage", handler: { data, responseCallback in
// // print("js call oc\(data)")
// var images = [SKPhoto]()
// let dic = data as! Dictionary<String, Any>
// let index = (dic["index"] as! NSString).integerValue
// let imageArray = dic["imgArr"] as! NSArray
// var imgArray = NSMutableArray()
// for dict in imageArray {
// var imgUrl = ""
// if let dictemp = dict as? String{
// imgArray.add(dictemp)
// imgUrl = dictemp
// }else if let dictemp = dict as? Dictionary<String, Any>{
// imgArray.add(dictemp["src"] ?? "")
// imgUrl = dictemp["src"] as! String
// }
// let photo = SKPhoto.photoWithImageURL(imgUrl)
// photo.shouldCachePhotoURLImage = false
// photo.photoURL = imgUrl
// images.append(photo)
// }
// let browser = SKPhotoBrowser(photos: images)
// browser.initializePageIndex(index)
// currentViewController()?.present(browser, animated: true)
//
// })
// }
//点击...分享获取h5参数oc call js
func configBridgeCallHander() -> Void {
self.webView.bridge?.callHandler("wjjClientGetShareParaFromJS", data: ["":""], responseCallback: { data in
// print("js call oc\(data)")
let dic = data as! Dictionary<String, String>
// let shareType = dic["shareType"]
// let contentIdStr = dic["activityId"]
let title = dic["title"]
let desc = dic["desc"]
let shareImg = dic["shareImg"]
var shareUrl = ""
if let tempShareUrl = dic["shareUrl"]{
if tempShareUrl == ""{
shareUrl = self.currentUrl
}else{
shareUrl = tempShareUrl
}
}else{
shareUrl = self.currentUrl
}
CNLiveShareManager.showShareViewWithParam(forShareTitle: title, shareUrl: shareUrl, shareDesc: desc, shareImage: shareImg, screenFull: false, hiddenWjj: true, hiddenQQ: false, hiddenWB: true, hiddenLifeCircle: true, hiddenWechatCircle: false, hiddenWechat: false, hiddenSafari: true, formVC: self, topImage: [], topTitles: [], platformType: .all) { title in
} completerBlock: { resultType, platformType, typeString in
if resultType == .succ{
}
}
})
}
// func checkURLWithStr(urlStr:String) -> String{
// if URL(string: urlStr)?.host != WjjH5 {
// return urlStr//不是wjjh5不作处理
// }
// var str = urlStr
// let date = Date()
// let formatter = DateFormatter()
// formatter.dateFormat = "yyyyMMdd"
// let dateStr = formatter.string(from: date)
// let sidStr = String(format: "%@%@", UserInfoManager.shared.userInfo.uid,dateStr)
// let signStr = sidStr.crypt(operation: CCOperation(kCCEncrypt), key: CNLiveMCEnvironmentManager.shared.appKey)
// //看是 appKey还是appKeywjj
// let sidSignStr = (signStr ?? "").isEmpty ? "" : signStr
// let sourceArray = str.components(separatedBy: "?")
// let buildVersion = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
// let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
// let uuid = CNLiveBusinessTools.getUidForStat(Date())
// if sourceArray.count == 1{
// //是wjjh5且无参数
// str = String(format: "%@?shareSid=%@&sid=%@&plat=i&ver=%@&version=%@&wjjFrom=apple&wjjUUID=%@&appId=%@&voteId=%@&wjjToken=%@", str,UserInfoManager.shared.userInfo.uid,UserInfoManager.shared.userInfo.uid,buildVersion,appVersion,uuid,CNLiveMCEnvironmentManager.shared.appId,sidSignStr!,UserInfoManager.shared.userInfo.token)
// return str
// }
// //是wjjh5且有参数
// let paraArr = NSMutableArray(array: ["shareSid=","sid=","plat=","ver=","version=","wjjFrom=","wjjUUID=","appId=","voteId=","wjjToken="])
// let valueArr = NSMutableArray(array:[UserInfoManager.shared.userInfo.uid,UserInfoManager.shared.userInfo.uid,"i",buildVersion,appVersion,"apple",uuid,CNLiveMCEnvironmentManager.shared.appId,sidSignStr!,UserInfoManager.shared.userInfo.token])
// var i = 0
// for paraStr in paraArr{
// let tempStr = paraStr as! String
// let paramStr = "&".appending(tempStr)
// let paramStr2 = "?".appending(tempStr)
//
// if str.contains(paramStr){
// //包含则替换 &sid=
// let lastStr = str.components(separatedBy: tempStr).last
// let lastSeparatedStr = (lastStr?.components(separatedBy: "&").first)!
// let oldStr = tempStr.appending(lastSeparatedStr)
// let tempValueStr = tempStr.appending(valueArr[i] as! String)
// str = str.replacingOccurrences(of: oldStr, with: tempValueStr)
// }else if str.contains(paramStr2){
// //包含则替换 &sid=
// let lastStr = str.components(separatedBy: tempStr).last
// let lastSeparatedStr = (lastStr?.components(separatedBy: "&").first)!
// let oldStr = tempStr.appending(lastSeparatedStr)
// let tempValueStr = tempStr.appending(valueArr[i] as! String)
// str = str.replacingOccurrences(of: oldStr, with: tempValueStr)
// }else{
// //不包含则拼接
// str = String(format: "%@&%@%@", str,tempStr,valueArr[i] as! String)
// }
// i = i + 1
// }
// return str
// }
// MARK: - BtnAction
// 内部链接右上角···分享
@objc func moreNavBtnAction(){
self.configBridgeCallHander()
}
override func ClickBackBtn() {
if self.webView.cnWebView.canGoBack{
self.webView.cnWebView.goBack()
}else{
super.ClickBackBtn()
}
}
// MARK: - WKWebViewDelegate
// // 页面开始加载时调用
// func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
//// print("didStartProvisionalNavigation")
// }
// // 当内容开始返回时调用
// func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
//// print("didCommit")
// }
//
// // 页面加载完成之后调用
// func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
//// print("didFinish")
// titleName = webView.title!
// }
// // 页面加载失败时调用
// func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
//// print("didFailProvisionalNavigation")
// }
// // 接收到服务器跳转请求之后调用
// func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {
//// print("didReceiveServerRedirectForProvisionalNavigation")
// }
// // 在收到响应后,决定是否跳转 -> 默认允许
// func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
//
//// print("decidePolicyFornavigationResponse")
//
// //允许跳转
// decisionHandler(.allow)
// //不允许跳转
// // decisionHandler(.cancel)
// }
// // 在发送请求之前,决定是否跳转 -> 默认允许
// func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
//// print("decidePolicyFornavigationAction")
//
// var urlStr = (navigationAction.request.url?.absoluteString)!
//
// if navigationAction.request.url?.host == WjjH5 {
//
// if urlStr.contains("&isWjjReport=true") || urlStr.contains("?isWjjReport=true"){
// self.rightNavBtns = [self.moreNavBtn]
// self.moreNavBtn.isHidden = false
// }else{
// self.moreNavBtn.isHidden = true
// }
//
// urlStr = self.checkURLWithStr(urlStr: urlStr)
// self.currentUrl = urlStr
// }
//
// if navigationAction.navigationType == .other{
// //跳转Appstore
// let url = URL(string: "https://apps.apple.com/cn/app/%E7%BD%91%E5%AE%B6%E5%AE%B6%E5%95%86%E5%AE%B6%E7%89%88/id1337575497")
// if url == navigationAction.request.url {
// if UIApplication.shared.canOpenURL(url!) { UIApplication.shared.open(url!, options: [:], completionHandler: nil)
// }
// }
// }else if navigationAction.navigationType == .linkActivated{
//
// //以后可判断h5地址 ,可跳转原生页面或网页
// //暂时只跳h5
// let webVC = CNWebViewController()
// webVC.url = URL(string: urlStr)
// navigationViewController().pushViewController(webVC, animated: pushAnimated)
// decisionHandler(.cancel)
// return
//
// }
// decisionHandler(.allow)
// }
}