zoukankan      html  css  js  c++  java
  • 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:@"方法名"]) {

      处理各类分享的点击事件

        }

    }

  • 相关阅读:
    03 Java 修饰符
    04_Java 循环结构 for, while 及 do...while
    01_Java第一个程序_报错记录
    07_Java StringBuffer 和 StringBuilder 类_(修改,并且不产生新的未使用对象)
    06_Math 的 floor,round 和 ceil 方法实例比较_格式化字符串_String类
    [爱偷懒的程序员系列]Section 1. “懒”是一切需求的根源
    (1)Micropython+ESP32 点亮一个LED
    数据迁移测试方法【转】
    回来了回来了,失踪人口回归
    [爱偷懒的程序员系列]Section 4. 自定义钉钉消息推送
  • 原文地址:https://www.cnblogs.com/FZP5/p/8611826.html
Copyright © 2011-2022 走看看