h5复制
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
import UIKit
|
||||||
import WebKit
|
import WebKit
|
||||||
import SnapKit
|
import SnapKit
|
||||||
import DDLogKit_Private
|
import DDLogKit_Private
|
||||||
@@ -154,8 +155,74 @@ extension WebViewController : WKScriptMessageHandler {
|
|||||||
let code = params?["code"] as? String
|
let code = params?["code"] as? String
|
||||||
let vc = VehicleMonitorHistoryController(code: code)
|
let vc = VehicleMonitorHistoryController(code: code)
|
||||||
navigationController?.pushViewController(vc, animated: true)
|
navigationController?.pushViewController(vc, animated: true)
|
||||||
|
} else if action == "copyToClipboard" {
|
||||||
|
let paramsAny = dict?["params"]
|
||||||
|
|
||||||
|
var output: String? = nil
|
||||||
|
|
||||||
|
if let paramsDict = paramsAny as? [String: Any] {
|
||||||
|
if let t = (paramsDict["text"] as? String) ?? (paramsDict["value"] as? String) {
|
||||||
|
let trimmed = t.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||||
|
if trimmed.isEmpty == false { output = trimmed }
|
||||||
|
}
|
||||||
|
if output == nil {
|
||||||
|
output = dictToMultilineKV(paramsDict)
|
||||||
|
}
|
||||||
|
} else if let paramsStr = paramsAny as? String {
|
||||||
|
if let multiline = jsonToMultilineKV(paramsStr) {
|
||||||
|
output = multiline
|
||||||
|
} else {
|
||||||
|
let trimmed = paramsStr.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||||
|
if trimmed.isEmpty == false { output = trimmed }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let finalText = (output ?? "").trimmingCharacters(in: .whitespacesAndNewlines)
|
||||||
|
guard finalText.isEmpty == false else {
|
||||||
|
view.dd_makeToast("复制内容为空")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
DispatchQueue.main.async {[weak self] in
|
||||||
|
UIPasteboard.general.string = finalText
|
||||||
|
self?.view.dd_makeToast("已复制")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func unwrapEscapedJSONString(_ raw: String) -> String {
|
||||||
|
let trimmed = raw.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||||
|
if trimmed.hasPrefix("\""), trimmed.hasSuffix("\""), trimmed.count >= 2 {
|
||||||
|
return String(trimmed.dropFirst().dropLast())
|
||||||
|
.replacingOccurrences(of: "\\\"", with: "\"")
|
||||||
|
.replacingOccurrences(of: "\\\\", with: "\\")
|
||||||
|
}
|
||||||
|
return trimmed
|
||||||
|
}
|
||||||
|
|
||||||
|
func jsonToMultilineKV(_ json: String) -> String? {
|
||||||
|
let s = unwrapEscapedJSONString(json)
|
||||||
|
guard let data = s.data(using: .utf8) else { return nil }
|
||||||
|
|
||||||
|
guard let obj = try? JSONSerialization.jsonObject(with: data, options: []) else { return nil }
|
||||||
|
|
||||||
|
guard let dict = obj as? [String: Any] else { return nil }
|
||||||
|
return dictToMultilineKV(dict)
|
||||||
|
}
|
||||||
|
|
||||||
|
func dictToMultilineKV(_ dict: [String: Any]) -> String {
|
||||||
|
|
||||||
|
let lines = dict
|
||||||
|
.map { (k, v) -> String in
|
||||||
|
let key = k.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||||
|
.replacingOccurrences(of: ":", with: ":")
|
||||||
|
let keyOut = key.hasSuffix(":") ? key : (key + ":")
|
||||||
|
return "\(keyOut)\(String(describing: v))"
|
||||||
|
}
|
||||||
|
.sorted()
|
||||||
|
|
||||||
|
return lines.joined(separator: "\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
extension WebViewController : WKNavigationDelegate,WKUIDelegate {
|
extension WebViewController : WKNavigationDelegate,WKUIDelegate {
|
||||||
|
|||||||
Reference in New Issue
Block a user