120 lines
3.8 KiB
Swift
120 lines
3.8 KiB
Swift
//
|
|
// NRWebViewController+Script.swift
|
|
// ReaderHive
|
|
//
|
|
// Created by 澜声世纪 on 2025/12/4.
|
|
//
|
|
|
|
import UIKit
|
|
internal import WebKit
|
|
import PhotosUI
|
|
|
|
///APP交互
|
|
let kNRWebMessageAPP = "js2app"
|
|
///打开反馈列表
|
|
let kNRWebMessageOpenFeedbackList = "openFeedbackList"
|
|
///打开反馈详情
|
|
let kNRWebMessageOpenFeedbackDetail = "openFeedbackDetail"
|
|
///打开相册
|
|
let kNRWebMessageOpenPhotoPicker = "openPhotoPicker"
|
|
///打开相册
|
|
let kNRWebMessageAccountDeletionFinish = "accountLogout"
|
|
|
|
|
|
extension NRWebViewController {
|
|
|
|
func nr_webViewUserContentController(didReceive message: WKScriptMessage) {
|
|
let name = message.name
|
|
let body = message.body
|
|
|
|
switch name {
|
|
case kNRWebMessageOpenFeedbackList:
|
|
let vc = NRAppWebViewController()
|
|
vc.webUrl = kNRFeedBackListWebUrl
|
|
self.navigationController?.pushViewController(vc, animated: true)
|
|
|
|
case kNRWebMessageOpenFeedbackDetail:
|
|
guard let body = body as? [String : Any] else { return }
|
|
guard let id = body["id"] as? Int else { return }
|
|
|
|
let vc = NRAppWebViewController()
|
|
vc.id = "\(id)"
|
|
vc.webUrl = kNRFeedBackDetailWebUrl
|
|
self.navigationController?.pushViewController(vc, animated: true)
|
|
|
|
case kNRWebMessageOpenPhotoPicker:
|
|
openPhotoPicker()
|
|
|
|
// case kNRWebMessageAPP:
|
|
// guard let body = message.body as? [String : Any] else { return }
|
|
// guard let model = FAWebMessageModel.deserialize(from: body) else { return }
|
|
// let type = model.type
|
|
// let data = model.data
|
|
//
|
|
// if type == "login" {
|
|
//// let view = FALoginView()
|
|
//// view.present(in: nil)
|
|
//
|
|
// } else {
|
|
//
|
|
// guard let urlStr = data?.link else { return }
|
|
// guard let url = URL(string: urlStr) else { return }
|
|
// if UIApplication.shared.canOpenURL(url) {
|
|
// UIApplication.shared.open(url)
|
|
// }
|
|
// }
|
|
|
|
case kNRWebMessageAccountDeletionFinish:
|
|
self.navigationController?.popToRootViewController(animated: true)
|
|
NotificationCenter.default.post(name: NRLoginManager.loginStateDidChangeNotification, object: nil)
|
|
|
|
default:
|
|
break
|
|
}
|
|
}
|
|
|
|
///打开相册
|
|
private func openPhotoPicker() {
|
|
var config = PHPickerConfiguration()
|
|
config.selectionLimit = 1
|
|
config.filter = .images
|
|
|
|
let picker = PHPickerViewController(configuration: config)
|
|
picker.delegate = self
|
|
self.present(picker, animated: true)
|
|
}
|
|
}
|
|
|
|
extension NRWebViewController: PHPickerViewControllerDelegate {
|
|
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
|
|
|
|
picker.dismiss(animated: true)
|
|
|
|
guard let result = results.first else { return }
|
|
|
|
let provider = result.itemProvider
|
|
|
|
guard provider.canLoadObject(ofClass: UIImage.self) else { return }
|
|
|
|
provider.loadObject(ofClass: UIImage.self) { object, error in
|
|
guard let image = object as? UIImage else { return }
|
|
|
|
DispatchQueue.main.async { [weak self] in
|
|
guard let self = self else { return }
|
|
self.upload(image)
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
private func upload(_ image: UIImage) {
|
|
guard let imageData = image.jpegData(compressionQuality: 0.8) else { return }
|
|
let imageDataStr = imageData.base64EncodedString(options: .endLineWithCarriageReturn)
|
|
let js = "uploadConvertImage('\(imageDataStr)')"
|
|
self.webView.evaluateJavaScript(js)
|
|
}
|
|
|
|
|
|
|
|
}
|