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:@"方法名"]) {
? 處理各類分享的點擊事件
? ? }
}
?
轉載于:https://www.cnblogs.com/FZP5/p/8611826.html
總結
以上是生活随笔為你收集整理的WKWebview与js交互的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到别人给我冥币是什么意思
- 下一篇: 梦到羊吃草什么意思