113 lines
3.0 KiB
Swift
113 lines
3.0 KiB
Swift
//
|
||
// 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)
|
||
}
|
||
}
|