Fableon/Fableon/Object/Base/WebView/FABaseWebViewController+Script.swift
湖北秦九 e0163dabe3 1
2025-10-31 13:36:20 +08:00

111 lines
3.8 KiB
Swift

//
// FABaseWebViewController+Script.swift
// Fableon
//
// Created by on 2025/10/22.
//
import UIKit
import WebKit
import ZLPhotoBrowser
import SmartCodable
///APP
let kFAWebMessageAPP = "js2app"
///
let kFAWebMessageOpenFeedbackList = "openFeedbackList"
///
let kFAWebMessageOpenFeedbackDetail = "openFeedbackDetail"
///
let kFAWebMessageOpenPhotoPicker = "openPhotoPicker"
///
let kFAWebMessageAccountDeletionFinish = "accountLogout"
extension FABaseWebViewController {
func fa_webViewUserContentController(didReceive message: WKScriptMessage) {
let name = message.name
let body = message.body
switch name {
case kFAWebMessageOpenFeedbackList:
let vc = FAAppWebViewController()
vc.webUrl = kFAFeedBackListWebUrl
self.navigationController?.pushViewController(vc, animated: true)
case kFAWebMessageOpenFeedbackDetail:
guard let body = body as? [String : Any] else { return }
guard let id = body["id"] as? Int else { return }
let vc = FAAppWebViewController()
vc.id = "\(id)"
vc.webUrl = kFAFeedBackDetailWebUrl
self.navigationController?.pushViewController(vc, animated: true)
case kFAWebMessageOpenPhotoPicker:
openPhotoPicker()
case kFAWebMessageAPP:
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 if type == "open_notify" {
// openNotify()
} else if type == "watch_video" {
let vc = FAPlayerDetailViewController()
vc.shortPlayId = data?.short_play_id
vc.activityId = data?.activity_id
self.navigationController?.pushViewController(vc, animated: true)
} 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 kFAWebMessageAccountDeletionFinish:
self.navigationController?.popToRootViewController(animated: true)
default:
break
}
}
///
private func openPhotoPicker() {
ZLPhotoConfiguration.default().allowSelectOriginal = false
ZLPhotoConfiguration.default().maxSelectCount = 1
ZLPhotoConfiguration.default().allowEditImage = false
ZLPhotoConfiguration.default().allowSelectVideo = false
ZLPhotoConfiguration.default().allowSelectGif = false
ZLPhotoConfiguration.default().allowTakePhotoInLibrary = false
let picker = ZLPhotoPicker()
picker.selectImageBlock = { [weak self] (results, _) in
guard let self = self else { return }
guard let image = results.first?.image else { return }
guard let imageData = image.jpegData(compressionQuality: 0.8) else { return }
let imageDataStr = imageData.base64EncodedString(options: .endLineWithCarriageReturn)
let js = "uploadConvertImage('\(imageDataStr)')"
self.webView.evaluateJavaScript(js)
}
picker.showPhotoLibrary(sender: self)
}
}