WebView

@MainActor
open class WebView : WKWebView

WKWebView封装,默认实现进度条、JS弹窗、Cookie管理、自定义User-Agent等

备注:

  1. 如需实现加载离线资源等场景,请使用configuration.setURLSchemeHandler
  2. 第一次加载可携带自定义Header,如果存在重定向,Header里面的Authorization因安全策略会丢失。解决方法示例:可新增Header比如X-Authorization,重定向时不会丢失
  3. 后续非首次加载自定义Header会丢失,解决方法示例:通过JSBridge桥接获取授权信息或采用GET参数|cookie储存等
  4. 如果遇到Cookie丢失问题,可尝试开启cookieEnabled或自行设置Cookie等
  • 事件代理,包含navigationDelegate和UIDelegate

    Declaration

    Swift

    @MainActor
    open weak var delegate: WebViewDelegate? { get set }
  • 是否启用Cookie管理,默认false未启用

    Declaration

    Swift

    @MainActor
    open var cookieEnabled: Bool
  • 进度视图,默认trackTintColor为clear

    Declaration

    Swift

    @MainActor
    open private(set) lazy var progressView: UIProgressView { get set }
  • 配置允许外部打开的Scheme数组,默认空

    Declaration

    Swift

    @MainActor
    open var allowsUrlSchemes: [String]
  • 配置允许路由打开的Scheme数组,默认空

    Declaration

    Swift

    @MainActor
    open var allowsRouterSchemes: [String]
  • 配置允许下载的url句柄(iOS14.5+生效),默认nil

    Declaration

    Swift

    @MainActor
    open var allowsDownloadUrl: ((URL) -> Bool)?
  • 是否允许打开通用链接,默认false

    Declaration

    Swift

    @MainActor
    open var allowsUniversalLinks: Bool
  • 是否允许不受信任的服务器,默认false

    需配置Info.plist开启NSAppTransportSecurity.NSAllowsArbitraryLoadsInWebContent或NSAllowsArbitraryLoads选项后生效

    Declaration

    Swift

    @MainActor
    open var allowsArbitraryLoads: Bool
  • 是否允许window.close关闭当前控制器,默认true

    如果WebView新开了界面,触发了createWebView回调后,则不会触发。 解决方案示例:使用injectWindowClose或JSBridge桥接或URL拦截等方式关闭界面

    Declaration

    Swift

    @MainActor
    open var allowsWindowClose: Bool
  • 是否注入window.close方法,触发JSBridge桥接方法

    Declaration

    Swift

    @MainActor
    open var injectWindowClose: Bool
  • 网页请求,设置后会自动加载,支持NSString|NSURL|NSURLRequest。默认nil

    Declaration

    Swift

    @MainActor
    open var webRequest: Any? { get set }
  • 是否是第一次加载,第一次加载成功及以前都为true

    Declaration

    Swift

    @MainActor
    open var isFirstLoad: Bool
  • 设置重用时预缓存资源的url句柄,同一个reuseIdentifier仅生效一次,自动处理堆栈

    Declaration

    Swift

    @MainActor
    public static var reusePreloadUrlBlock: ((String) -> Any?)?

Lifecycle

  • Undocumented

    Declaration

    Swift

    @MainActor
    override public init(frame: CGRect, configuration: WKWebViewConfiguration)
  • Undocumented

    Declaration

    Swift

    @MainActor
    public convenience init(frame: CGRect)
  • Undocumented

    Declaration

    Swift

    @MainActor
    public required init?(coder: NSCoder)
  • Undocumented

    Declaration

    Swift

    @discardableResult
    @MainActor
    override open func load(_ request: URLRequest) -> WKNavigation?

ReusableViewProtocol

  • 即将回收视图,必须调用super

    Declaration

    Swift

    @MainActor
    override open func reusableViewWillRecycle()
  • 即将重用视图,默认重用次数+1,必须调用super

    Declaration

    Swift

    @MainActor
    override open func reusableViewWillReuse()