Fableon/Fableon/Object/Base/WebView/FABaseWebViewController.swift
2025-10-23 16:54:27 +08:00

113 lines
3.0 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// FABaseWebViewController.swift
// Fableon
//
// Created by on 2025/10/16.
//
import UIKit
import WebKit
class FABaseWebViewController: FAViewController {
var webUrl: String?
///
var autoTitle = true
var needAutoRefresh = true
private(set) lazy var webView: FAWebView = {
let controller = WKUserContentController()
let config = WKWebViewConfiguration()
config.userContentController = controller
config.preferences.javaScriptEnabled = true
/** JS */
config.preferences.javaScriptCanOpenWindowsAutomatically = true
let webView = FAWebView(frame: self.view.bounds, configuration: config)
webView.delegate = self
return webView
}()
override func viewDidLoad() {
super.viewDidLoad()
// self.edgesForExtendedLayout = []
fa_setupLayout()
if let url = webUrl {
self.load(webUrl: url)
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.setNavigationBarHidden(false, animated: true)
self.fa_setNavigationStyle()
}
func load(webUrl: String) {
let str: String = webUrl
guard let url = URL(string: str) else { return }
let request = URLRequest(url: url, timeoutInterval: 30)
self.webView.load(request)
}
func reload() {
self.webView.reload()
}
}
extension FABaseWebViewController {
private func fa_setupLayout() {
self.view.addSubview(webView)
self.webView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(0)
make.right.equalToSuperview().offset(0)
make.bottom.equalToSuperview().offset(0)
make.top.equalToSuperview().offset(UIScreen.navBarHeight)
}
}
}
//MARK: -------------- VPWebViewDelegate --------------
extension FABaseWebViewController: FAWebViewDelegate {
func fa_webView(_ webView: FAWebView, shouldStartLoadWith navigationAction: WKNavigationAction) -> Bool {
self.webView.isHidden = false
return true
}
func fa_webViewDidStartLoad(_ webView: FAWebView) {
FAHUD.show(containerView: self.view)
}
func fa_webView(webView: FAWebView, didChangeTitle title: String) {
if autoTitle {
self.title = title
}
}
func fa_webViewDidFinishLoad(_ webView: FAWebView) {
self.webView.isHidden = false
FAHUD.dismiss()
}
func fa_webView(_ webView: FAWebView, didFailLoadWithError error: any Error) {
FAHUD.dismiss()
}
func fa_userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
self.fa_webViewUserContentController(didReceive: message)
}
}