• WKWebview与js交互


    应用场景:

    项目中在原有h5界面中嵌入js代码,在指定位置加入第三方分享

    此部分为js点击分享绑定部分代码,这里的事件名需要h5和前端协商好一致。

    window.webkit.messageHandlers.<事件名>.postMessage(需要传递的数据)

    iOS端

    首先需要遵循WKUIDelegate,WKNavigationDelegate,WKScriptMessageHandler三个代理方法

    WKWebViewConfiguration *wkConfig = [[WKWebViewConfiguration alloc] init];

        wkConfig.userContentController = [[WKUserContentController alloc] init];

    此处事件名与h5端js代码事件名一致

        [wkConfig.userContentController addScriptMessageHandler:self name:@"事件名"];

        self.webview = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:wkConfig];

        self.webview.backgroundColor = WXColor(240, 240, 240);

        self.webview.UIDelegate = self;

        self.webview.navigationDelegate =self;

        [self.view addSubview:self.webview];

        [self.webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"URL"]]];

    // 页面开始加载时调用

    - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{

    }

    // 当内容开始返回时调用

    - (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation{

    }

    // 页面加载完成之后调用

    - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{

    //此处向原h5界面注入js代码jsStr。

        [self.webview evaluateJavaScript:jsStr completionHandler:^(id _Nullable rest, NSError * _Nullable error) {

            NSLog(@"error_____%@",error);

    //如果这里提示error,则js代码中含有特殊字符如空格和换行,需要去掉。

        }];

    // 页面加载失败时调用

    - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation{

    }

        

    }

    //实现js注入方法的协议方法

    - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {

        NSLog(@"message____%@", message);

        //找到对应js端的方法名,获取messge.body

        if ([message.name isEqualToString:@"方法名"]) {

      处理各类分享的点击事件

        }

    }

  • 相关阅读:
    Java之五种遍历Map集合的方式
    CUDA功能和通用功能
    编写CUDA内核
    LLD-LLVM链接器
    Pass Infrastructure基础架构(下)
    Pass Infrastructure基础架构(上)
    算子规范化
    多级中间表示概述MLIR
    “ compiler-rt”运行时runtime库
    LLDB调试器
  • 原文地址:https://www.cnblogs.com/FZP5/p/8611826.html
Copyright © 2020-2023  润新知