同步操作将从 兰德网络O2OA平台软件/O2OA 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
//// BaseWebViewUIViewController.swift// O2Platform//// Created by 刘振兴 on 2016年10月11日.// Copyright © 2016年 zoneland. All rights reserved.//import UIKitimport WebKitimport CocoaLumberjackprotocol BaseWebViewUIViewControllerJSDelegate {func closeUIViewWindow()func actionBarLoaded(show: Bool)}protocol O2WKScriptMessageHandlerImplement {func userController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage)}open class BaseWebViewUIViewController: UIViewController {var webView:WKWebView!var delegate: BaseWebViewUIViewControllerJSDelegate?var o2WKScriptHandlers: [String : O2WKScriptMessageHandlerImplement] = [:]//定位用var locationCallBack: (String?) -> Void = {(result) in }private var locService: BMKLocationManager?private var searchAddress: BMKGeoCodeSearch?//继承的子类如果要添加MessageHandler必须在theWebView方法前使用func addScriptMessageHandler(key: String, handler: O2WKScriptMessageHandlerImplement) {o2WKScriptHandlers[key] = handler}open func theWebView(){let baseJsHandler = O2BaseJsMessageHandler(viewController: self)// bbs 回复addScriptMessageHandler(key: "ReplyAction", handler: baseJsHandler)// protal已经存在ActionBaraddScriptMessageHandler(key: "actionBarLoaded", handler: baseJsHandler)// 打开工作 {"work":"", "workCompleted":"", "title":""}addScriptMessageHandler(key: "openO2Work", handler: baseJsHandler)// 4个分类 task taskCompleted read readCompletedaddScriptMessageHandler(key: "openO2WorkSpace", handler: baseJsHandler)// 打开cms appIdaddScriptMessageHandler(key: "openO2CmsApplication", handler: baseJsHandler)// 打开cms docId docTitleaddScriptMessageHandler(key: "openO2CmsDocument", handler: baseJsHandler)// 打开meetingaddScriptMessageHandler(key: "openO2Meeting", handler: baseJsHandler)// 打开 calendaraddScriptMessageHandler(key: "openO2Calendar", handler: baseJsHandler)// 打开扫一扫addScriptMessageHandler(key: "openScan", handler: baseJsHandler)addScriptMessageHandler(key: "openO2Alert", handler: baseJsHandler)// 打开钉钉addScriptMessageHandler(key: "openDingtalk", handler: baseJsHandler)// 关闭当前UIViewControlleraddScriptMessageHandler(key:"closeNativeWindow", handler: baseJsHandler)// 上传图片到云盘,放入对应的业务区域addScriptMessageHandler(key: "uploadImage2FileStorage", handler: baseJsHandler)// 打印日志addScriptMessageHandler(key: "o2mLog", handler: baseJsHandler)//o2m.notificationlet o2Notification = O2JsApiNotification(viewController: self)addScriptMessageHandler(key: "o2mNotification", handler: o2Notification)//o2m.utillet o2Util = O2JsApiUtil(viewController: self)addScriptMessageHandler(key: "o2mUtil", handler: o2Util)// o2m.bizlet biz = O2JsApiBizUtil(viewController: self)addScriptMessageHandler(key: "o2mBiz", handler: biz)setupWebView()}public func setupWebView() {let userContentController = WKUserContentController()//cookie脚本if let cookies = HTTPCookieStorage.shared.cookies {let script = getJSCookiesString(cookies: cookies)let cookieScript = WKUserScript(source: script, injectionTime: WKUserScriptInjectionTime.atDocumentStart, forMainFrameOnly: false)userContentController.addUserScript(cookieScript)}// console.log 打印到ios log debug用let consoleLog = "console.log = (function(oriLogFunc){return function(str){window.webkit.messageHandlers.o2mLog.postMessage(str);oriLogFunc.call(console,str);} })(console.log);"let logScript = WKUserScript(source: consoleLog, injectionTime: WKUserScriptInjectionTime.atDocumentStart, forMainFrameOnly: false)userContentController.addUserScript(logScript)let webViewConfig = WKWebViewConfiguration()webViewConfig.userContentController = userContentController//加入js-app message handlerfor item in o2WKScriptHandlers {userContentController.add(self, name: item.key)}self.webView = WKWebView(frame: self.view.frame, configuration: webViewConfig)}///Generates script to create given cookiespublic func getJSCookiesString(cookies: [HTTPCookie]) -> String {var result = ""let dateFormatter = DateFormatter()dateFormatter.timeZone = NSTimeZone(abbreviation: "UTC") as TimeZone?dateFormatter.dateFormat = "EEE, d MMM yyyy HH:mm:ss zzz"for cookie in cookies {result += "document.cookie='\(cookie.name)=\(cookie.value); domain=\(cookie.domain); path=\(cookie.path); "if let date = cookie.expiresDate {result += "expires=\(dateFormatter.string(from: date)); "}if (cookie.isSecure) {result += "secure; "}result += "'; "}return result}}extension BaseWebViewUIViewController: WKScriptMessageHandler {public func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {let name = message.nameif let handler = o2WKScriptHandlers[name] {handler.userController(userContentController, didReceive: message)}else {let err = "没有找到对应的key,key:\(name)"self.showError(title: err)}}}extension BaseWebViewUIViewController: BMKLocationManagerDelegate, BMKGeoCodeSearchDelegate {public func startLocation() {//开始定位locService = BMKLocationManager()if locService == nil {locService?.desiredAccuracy = kCLLocationAccuracyBest//设置返回位置的坐标系类型locService?.coordinateType = .BMK09LL//设置距离过滤参数locService?.distanceFilter = kCLDistanceFilterNone;//设置预期精度参数locService?.desiredAccuracy = kCLLocationAccuracyBest;//设置应用位置类型locService?.activityType = .automotiveNavigation//设置是否自动停止位置更新locService?.pausesLocationUpdatesAutomatically = false//定位返回geo地址信息locService?.locatingWithReGeocode = true//后台定位locService?.allowsBackgroundLocationUpdates = true}if searchAddress == nil {searchAddress = BMKGeoCodeSearch()}searchAddress?.delegate = selflocService?.delegate = selflocService?.startUpdatingLocation()}public func stopLocation() {locService?.stopUpdatingLocation()locService?.delegate = nilsearchAddress?.delegate = nil}public func bmkLocationManager(_ manager: BMKLocationManager, didUpdate location: BMKLocation?, orError error: Error?) {if let loc = location?.location {DDLogDebug("当前位置,\(loc.coordinate.latitude),\(loc.coordinate.longitude)")//根据经纬度搜索到地址let re = BMKReverseGeoCodeSearchOption()re.location = CLLocationCoordinate2D(latitude: loc.coordinate.latitude, longitude: loc.coordinate.longitude)let _ = searchAddress?.reverseGeoCode(re)} else {DDLogError("没有获取到定位信息!!!!!")}}public func bmkLocationManager(_ manager: BMKLocationManager, didFailWithError error: Error?) {DDLogError("定位错误:\(String(describing: error?.localizedDescription))")}public func onGetReverseGeoCodeResult(_ searcher: BMKGeoCodeSearch?, result: BMKReverseGeoCodeSearchResult?, errorCode error: BMKSearchErrorCode) {//发送定位的实时位置及名称信息if let location = result?.location {var r = O2DeviceLocationResult()r.latitude = location.latituder.longitude = location.longituder.address = result?.address ?? "没有获取到地址!"locationCallBack(r.toJSONString())}else {var r = O2DeviceLocationResult()r.address = "没有获取到地址!"locationCallBack(r.toJSONString())DDLogError("搜索地址失败, \(error)")}//结束定位self.stopLocation()}public func onGetGeoCodeResult(_ searcher: BMKGeoCodeSearch!, result: BMKGeoCodeSearchResult!, errorCode error: BMKSearchErrorCode) {if Int(error.rawValue) == 0 {DDLogDebug("result \(String(describing: result))")} else {DDLogDebug("result error errorCode = \(Int(error.rawValue))")}}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。