ReaderHive/ReaderHive/Base/WebView/NRWebViewController.swift
2025-12-17 18:04:38 +08:00

112 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.

//
// 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)
}
}