美文网首页
iOS | oc与js(iOS与H5)的交互

iOS | oc与js(iOS与H5)的交互

作者: 颜小宋 | 来源:发表于2019-03-21 16:49 被阅读0次

总结一下自己用到过的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)

相关文章

网友评论

      本文标题:iOS | oc与js(iOS与H5)的交互

      本文链接:https://www.haomeiwen.com/subject/idhcvqtx.html