• WKWebKit基础


    UIWebView & UIWebViewDelegate 这个两个东西在 WKWebKit 中被重构成 14 个类 3 个协议。

    WKWebKit Framework

    Classes

    • WKBackForwardList: 之前访问过的 web 页面的列表,可以通过后退和前进动作来访问到。
      • WKBackForwardListItem: webview 中后退列表里的某一个网页。
    • WKFrameInfo: 包含一个网页的布局信息。
    • WKNavigation: 包含一个网页的加载进度信息。
      • WKNavigationAction: 包含可能让网页导航变化的信息,用于判断是否做出导航变化。
      • WKNavigationResponse: 包含可能让网页导航变化的返回内容信息,用于判断是否做出导航变化。
    • WKPreferences: 概括一个 webview 的偏好设置。
    • WKProcessPool: 表示一个 web 内容加载池。
    • WKUserContentController: 提供使用 JavaScript post 信息和注射 script 的方法。
      • WKScriptMessage: 包含网页发出的信息。
      • WKUserScript: 表示可以被网页接受的用户脚本。 > - WKWebViewConfiguration: 初始化 webview 的设置。
    • WKWindowFeatures: 指定加载新网页时的窗口属性。

    Protocols

    • WKNavigationDelegate: 提供了追踪主窗口网页加载过程和判断主窗口和子窗口是否进行页面加载新页面的相关方法。
    • WKScriptMessageHandler: 提供从网页中收消息的回调方法。
    • WKUIDelegate: 提供用原生控件显示网页的方法回调。

    JavaScript ↔︎ Swift 对话机制

    WKUserScript 允许在正文加载之前或之后注入到页面中。这个强大的功能允许在页面中以安全且唯一的方式操作网页内容。

    一个简单的例子如下,用户改变背景的用户脚本被插入到网页中:

    Swift:

    let source = "document.body.style.background = "#777";"
    let userScript = WKUserScript(source: source, injectionTime: .AtDocumentEnd, forMainFrameOnly: true)
    
    let userContentController = WKUserContentController()
    userContentController.addUserScript(userScript)
    
    let configuration = WKWebViewConfiguration()
    configuration.userContentController = userContentController
    self.webView = WKWebView(frame: self.view.bounds, configuration: configuration)

    Objective-C:

    NSString *source = @"document.body.style.background = "#BECAC1";";
        WKUserScript *userScript = [[WKUserScript alloc] initWithSource:source injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:true];
        WKUserContentController *userContentController = [[WKUserContentController alloc] init];
        [userContentController addUserScript:userScript];
        WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
        configuration.userContentController = userContentController;
        
        _webView = [[WKWebView alloc]initWithFrame:CGRectMake(0, 0, SCREENWIDTH, SCREENHEIGHT) configuration:configuration];
        _webView.navigationDelegate = self;
        _webView.UIDelegate = self;
        [_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.baidu.com"]]];
        [self.view addSubview:_webView];

    webView生命周期和跳转代理

    // 页面开始加载时调用
    - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;
    // 当内容开始返回时调用
    - (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;
    // 页面加载完成之后调用
    - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;
    // 页面加载失败时调用
    - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation;
    
    // 接收到服务器跳转请求之后调用
    - (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation;
    // 在收到响应后,决定是否跳转
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler;
    // 在发送请求之前,决定是否跳转
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;
  • 相关阅读:
    10 个迅速提升你 Git 水平的提示
    git-自动补全
    Andriod Atom x86模拟器启动报错
    Android SDK Manager 无法更新SDK
    tiny4412 解决内核编译版本号问题
    Move resources allocated using unmanaged interface to managed devm interface
    原理图学习
    解决tiny4412在win7 64位上adb无法使用失败的问题
    popcount 算法分析
    linux中断申请之request_threaded_irq
  • 原文地址:https://www.cnblogs.com/wlsxmhz/p/5587427.html
Copyright © 2020-2023  润新知