WKWebView问题

WKWebView无法响应H5页面中的location.href

根据WKWebView代理方法 WKNavigationDelegate拦截location.herf动作

1
2
3
4
5
6
7
8
9
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
if (![navigationAction.request.URL.absoluteString containsString:@"http://"] && ![navigationAction.request.URL.absoluteString containsString:@"https://"]) {

}
decisionHandler(WKNavigationActionPolicyCancel);
} else {
decisionHandler(WKNavigationActionPolicyAllow);
}
}

WKWebView如何使用JS调用原生方法

1.设置WKScriptMessageHandler,注册js方法

1
2
3
4
5
WKWebViewConfiguration *config = [WKWebViewConfiguration new];
self.userContent = [[WKUserContentController alloc] init];
[self.userContent addScriptMessageHandler:self name:@"JSFuncName"];
config.userContentController = self.userContent;
WKWebView *webv = [[WKWebView alloc] initWithFrame:CGRectZero configuration:config];

2.实现WKWebView的WKScriptMessageHandler代理方法

1
2
3
4
5
6
7
8
9
10
-(void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
{
NSString *scriptName = message.name;
NSLog(@"%@", message.body);
if([scriptName isEqualToString:@"JSFuncName"]){
NSLog(@"To Do Something");
}


}