This commit is contained in:
ddisfriend
2026-01-27 17:07:58 +08:00
parent 18e0c52fe6
commit 1476c04be1

View File

@@ -6,6 +6,7 @@
//
import Foundation
import UIKit
import WebKit
import SnapKit
import DDLogKit_Private
@@ -154,10 +155,76 @@ 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 {
public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
view.dd_hideHUD()