📜  decisionHandler(WKNavigationActionPolicyAllow, WKWebpagePreferences (1)

📅  最后修改于: 2023-12-03 15:30:25.123000             🧑  作者: Mango

WKNavigationActionPolicyAllow 和 WKWebpagePreferences

WKNavigationActionPolicyAllow和WKWebpagePreferences都是iOS中的WebView组件WKWebView中的功能点。这篇文章将会介绍这两个功能点的详细内容。

WKNavigationActionPolicyAllow

WKNavigationActionPolicyAllow是WKNavigationDelegate中的一个枚举值属性,用于控制WebView是否可以加载一个URL请求。

enum WKNavigationActionPolicy : Int {
    case cancel // 取消导航
    case allow // 允许导航
}

在WebKit加载URL时,默认情况下会询问WKNavigationDelegate中的webView(_:decidePolicyFor:decisionHandler:)方法,该方法返回一个WKNavigationActionPolicy枚举值,以控制URL是否可以加载。如果返回值是.allow,URL请求会继续加载,否则,URL请求将会被取消。

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if navigationAction.navigationType == .linkActivated  {
        decisionHandler(.cancel)
    } else {
        decisionHandler(.allow)
    }
}

上面的代码片段是一个例子,判断了当前URL请求的类型,如果是一个链接在被单击时,则取消该导航。

WKWebpagePreferences

WKWebpagePreferences用于设置WebView页面的一些偏好信息,包括页面的背景色、字体大小等等。

@available(iOS 14.0, *)
class WKWebpagePreferences : NSObject {
    var preferredContentMode: WKWebpagePreferences.ContentMode
    var prefersReducedMotion: Bool
    var prefersContrastReducedTransparency: Bool
    var ignoresViewportScaleLimits: Bool
}

在iOS 14.0及以上版本中,可以通过WKWebView.configuration.defaultWebpagePreferences来获取一个默认的WKWebpagePreferences对象,并可以按需要修改其属性值。

if #available(iOS 14.0, *) {
    let config = WKWebViewConfiguration()
    let webpagePreferences = config.defaultWebpagePreferences!
    webpagePreferences.preferredContentMode = .mobile
    webpagePreferences.prefersReducedMotion = true
    webView = WKWebView(frame: .zero, configuration: config)
}

上面的代码片段是一个更改WebView页面偏好信息的例子,将页面内容模式设置为移动端,并开启减少动态效果和透明度的降低对比度等设置。