总结一下自己用到过的iOS与H5的交互
oc调用js
这些方法的调用需要在网页加载完成之后
- UIWebview
NSString *js = @"getmessage()";
id info = [self.webView stringByEvaluatingJavaScriptFromString:js];
if (info)
TODO: 接下来的操作就看自己的需求了
js部分
function getmessage() {
}
- WKWebview
[self.wkWebView evaluateJavaScript:js completionHandler:^(id _Nullable url, NSError * _Nullable error) {
if (!error)
TODO: 接下来的操作就看自己的需求了
}];
另外
若想获取html页面header里的内容,只需在上面调用方法之前的字符串更改为如下,即可获取content中的内容
NSString *appShareContent = @"document.getElementsByName(\"app-share-content\")[0].content";
js部分 在header中添加
<meta name="app-share-content" content="内容">
js调用oc
- UIWebview
JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
context[@"getmessage"] = ^(NSString *url) {
if (url.length) {
}
};
对应的js部分
function locationClick() {
getmessage('url');
}
- WKWebview
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
configuration.userContentController = [[WKUserContentController alloc] init];
[configuration.userContentController addScriptMessageHandler:self name:@"getmessage"];
接下来就是执行WKScriptMessageHandler的协议了
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
if ([message.name isEqualToString:@"getmessage"]) {
TODO:
}
}
调用此方法移除
- (void)removeScriptMessageHandlerForName:(NSString *)name;
对应的js部分
window.webkit.messageHandlers.getmessage.postMessage(string)
网友评论