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

2019-03-21  本文已影响0人  颜小宋

总结一下自己用到过的iOS与H5的交互

oc调用js

这些方法的调用需要在网页加载完成之后

NSString *js = @"getmessage()";
id info = [self.webView stringByEvaluatingJavaScriptFromString:js];
if (info)
   TODO: 接下来的操作就看自己的需求了

js部分

function getmessage() {
}
[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

JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
context[@"getmessage"] = ^(NSString *url) {
   if (url.length) {
   }
};

对应的js部分

function locationClick() {
  getmessage('url');
}
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)
上一篇 下一篇

猜你喜欢

热点阅读