开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (6)
标签 (39)
master
develop
wrdp
release
dependabot/maven/o2server/org.quartz-scheduler-quartz-2.3.2
dependabot/npm_and_yarn/o2server/mixin-deep-1.3.2
5.4.1
wrdp-5.4.0
5.4.0
5.3.5
5.3.4
5.3.3
5.3.2
5.3.1
5.3.0
wrdp-5.3.0
wrdp-5.2.6
wrdp-5.2.5
wrdp-5.2.4
wrdp-5.2.3
5.2.5
wrdp-5.2
5.2.4
5.2.3
5.2.2
wrdp-5.2.1
master
分支 (6)
标签 (39)
master
develop
wrdp
release
dependabot/maven/o2server/org.quartz-scheduler-quartz-2.3.2
dependabot/npm_and_yarn/o2server/mixin-deep-1.3.2
5.4.1
wrdp-5.4.0
5.4.0
5.3.5
5.3.4
5.3.3
5.3.2
5.3.1
5.3.0
wrdp-5.3.0
wrdp-5.2.6
wrdp-5.2.5
wrdp-5.2.4
wrdp-5.2.3
5.2.5
wrdp-5.2
5.2.4
5.2.3
5.2.2
wrdp-5.2.1
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (6)
标签 (39)
master
develop
wrdp
release
dependabot/maven/o2server/org.quartz-scheduler-quartz-2.3.2
dependabot/npm_and_yarn/o2server/mixin-deep-1.3.2
5.4.1
wrdp-5.4.0
5.4.0
5.3.5
5.3.4
5.3.3
5.3.2
5.3.1
5.3.0
wrdp-5.3.0
wrdp-5.2.6
wrdp-5.2.5
wrdp-5.2.4
wrdp-5.2.3
5.2.5
wrdp-5.2
5.2.4
5.2.3
5.2.2
wrdp-5.2.1
O2OA
/
o2ios
/
O2Platform
/
UI
/
BaseWebViewUIViewController.swift
O2OA
/
o2ios
/
O2Platform
/
UI
/
BaseWebViewUIViewController.swift
BaseWebViewUIViewController.swift 9.05 KB
一键复制 编辑 原始数据 按行查看 历史
fancylou 提交于 2020年07月29日 14:01 +08:00 . ios jssdk 添加单次定位的api
//
// BaseWebViewUIViewController.swift
// O2Platform
//
// Created by 刘振兴 on 2016年10月11日.
// Copyright © 2016年 zoneland. All rights reserved.
//
import UIKit
import WebKit
import CocoaLumberjack
protocol 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已经存在ActionBar
addScriptMessageHandler(key: "actionBarLoaded", handler: baseJsHandler)
// 打开工作 {"work":"", "workCompleted":"", "title":""}
addScriptMessageHandler(key: "openO2Work", handler: baseJsHandler)
// 4个分类 task taskCompleted read readCompleted
addScriptMessageHandler(key: "openO2WorkSpace", handler: baseJsHandler)
// 打开cms appId
addScriptMessageHandler(key: "openO2CmsApplication", handler: baseJsHandler)
// 打开cms docId docTitle
addScriptMessageHandler(key: "openO2CmsDocument", handler: baseJsHandler)
// 打开meeting
addScriptMessageHandler(key: "openO2Meeting", handler: baseJsHandler)
// 打开 calendar
addScriptMessageHandler(key: "openO2Calendar", handler: baseJsHandler)
// 打开扫一扫
addScriptMessageHandler(key: "openScan", handler: baseJsHandler)
addScriptMessageHandler(key: "openO2Alert", handler: baseJsHandler)
// 打开钉钉
addScriptMessageHandler(key: "openDingtalk", handler: baseJsHandler)
// 关闭当前UIViewController
addScriptMessageHandler(key:"closeNativeWindow", handler: baseJsHandler)
// 上传图片到云盘,放入对应的业务区域
addScriptMessageHandler(key: "uploadImage2FileStorage", handler: baseJsHandler)
// 打印日志
addScriptMessageHandler(key: "o2mLog", handler: baseJsHandler)
//o2m.notification
let o2Notification = O2JsApiNotification(viewController: self)
addScriptMessageHandler(key: "o2mNotification", handler: o2Notification)
//o2m.util
let o2Util = O2JsApiUtil(viewController: self)
addScriptMessageHandler(key: "o2mUtil", handler: o2Util)
// o2m.biz
let 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 handler
for item in o2WKScriptHandlers {
userContentController.add(self, name: item.key)
}
self.webView = WKWebView(frame: self.view.frame, configuration: webViewConfig)
}
///Generates script to create given cookies
public 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.name
if 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 = self
locService?.delegate = self
locService?.startUpdatingLocation()
}
public func stopLocation() {
locService?.stopUpdatingLocation()
locService?.delegate = nil
searchAddress?.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.latitude
r.longitude = location.longitude
r.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))")
}
}
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

开源OA系统 - 码云GVP|Java开源oa|企业OA办公平台|企业OA|协同办公OA|流程平台OA|O2OA|OA,支持国产麒麟操作系统和国产数据库(达梦、人大金仓),政务OA,军工信息化OA
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/mxvj/O2OA.git
git@gitee.com:mxvj/O2OA.git
mxvj
O2OA
O2OA
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /