112 lines
3.0 KiB
Swift
112 lines
3.0 KiB
Swift
//
|
||
// NRWebViewController.swift
|
||
// ReaderHive
|
||
//
|
||
// Created by 澜声世纪 on 2025/12/4.
|
||
//
|
||
|
||
import UIKit
|
||
internal import WebKit
|
||
import SnapKit
|
||
|
||
class NRWebViewController: NRViewController {
|
||
|
||
var webUrl: String?
|
||
|
||
var needAutoRefresh = true
|
||
|
||
private(set) lazy var webView: NRWebView = {
|
||
let controller = WKUserContentController()
|
||
|
||
let config = WKWebViewConfiguration()
|
||
config.userContentController = controller
|
||
config.preferences.javaScriptEnabled = true
|
||
/** 默认是不能通过JS自动打开窗口的,必须通过用户交互才能打开 */
|
||
config.preferences.javaScriptCanOpenWindowsAutomatically = true
|
||
let webView = NRWebView(frame: self.view.bounds, configuration: config)
|
||
webView.delegate = self
|
||
return webView
|
||
}()
|
||
|
||
override func viewDidLoad() {
|
||
super.viewDidLoad()
|
||
self.edgesForExtendedLayout = .top
|
||
self.backgroundImageView.isHidden = true
|
||
configNavigationBack("arrow_left_icon_05")
|
||
|
||
_setupUI()
|
||
|
||
if let url = webUrl {
|
||
self.load(webUrl: url)
|
||
}
|
||
|
||
}
|
||
|
||
override func viewWillAppear(_ animated: Bool) {
|
||
super.viewWillAppear(animated)
|
||
self.navigationController?.setNavigationBarHidden(false, animated: true)
|
||
self.nr_setNavigationStyle(titleColor: UINavigationBar.titleBlackColor)
|
||
}
|
||
|
||
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 NRWebViewController {
|
||
|
||
private func _setupUI() {
|
||
self.view.addSubview(webView)
|
||
|
||
self.webView.snp.makeConstraints { make in
|
||
make.left.equalToSuperview().offset(0)
|
||
make.right.equalToSuperview().offset(0)
|
||
make.top.equalToSuperview().offset(UIScreen.navBarHeight)
|
||
make.bottom.equalToSuperview().offset(0)
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
|
||
//MARK: -------------- VPWebViewDelegate --------------
|
||
extension NRWebViewController: NRWebViewDelegate {
|
||
|
||
func nr_webView(_ webView: NRWebView, shouldStartLoadWith navigationAction: WKNavigationAction) -> Bool {
|
||
self.webView.isHidden = false
|
||
return true
|
||
}
|
||
|
||
func nr_webViewDidStartLoad(_ webView: NRWebView) {
|
||
NRHud.show(containerView: self.view)
|
||
}
|
||
|
||
func nr_webView(webView: NRWebView, didChangeTitle title: String) {
|
||
|
||
}
|
||
|
||
func nr_webViewDidFinishLoad(_ webView: NRWebView) {
|
||
self.webView.isHidden = false
|
||
NRHud.dismiss()
|
||
}
|
||
|
||
func nr_webView(_ webView: NRWebView, didFailLoadWithError error: any Error) {
|
||
NRHud.dismiss()
|
||
}
|
||
|
||
func nr_userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
|
||
nr_webViewUserContentController(didReceive: message)
|
||
}
|
||
|
||
}
|