h5复制
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import UIKit
|
||||
import WebKit
|
||||
import SnapKit
|
||||
import DDLogKit_Private
|
||||
@@ -154,8 +155,74 @@ extension WebViewController : WKScriptMessageHandler {
|
||||
let code = params?["code"] as? String
|
||||
let vc = VehicleMonitorHistoryController(code: code)
|
||||
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 {
|
||||
|
||||
Reference in New Issue
Block a user