Fork me on GitHub

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:@"方法名"]) {

  处理各类分享的点击事件

    }

}

 

posted @ 2018-03-20 19:30  平凡的不平凡  阅读(164)  评论(0编辑  收藏  举报
AmazingCounters.com