美文网首页
27期_iOS_浅谈JS Bridge

27期_iOS_浅谈JS Bridge

作者: 萧修 | 来源:发表于2023-08-28 01:05 被阅读0次

JS Bridge是桥接JS和Native的桥梁,分为JS调用Native和Native主动调用JS两种形式

URL Scheme:

通过浏览器的形式能打开app,在Xcode中配置

JS调原生

WKUserContentController

  • addScriptMessageHandler
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
WKUserContentController *userCC = configuration.userContentController;
// 注入对象
[userCC addScriptMessageHandler:self name:@"nativeObj"];
  • removeScriptMessageHandler
// 清除对象
[userCC removeScriptMessageHandler:self name:@"nativeObj"];
  • didReceiveScriptMessage
//处理前端调用
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
{
    // 获取前端传来的参数
    NSDictionary *msgBody = message.body;
    // 如果是 nativeObj 就进行相应处理
    if (![message.name isEqualToString:@"nativeObj"]) {
        // 
        return;
    }
}
  • messageHandlers
//H5调用
window.webkit.messageHandlers.nativeObj.postMessage(data);

原生调JS

  • evaluateJavaScript

一般发生于界面完成后调用,用来调用JS的函数并获取返回值风采方便

[self.webView evaluateJavaScript:@"document.body.offsetHeight;" completionHandler:^(id _Nullable response, NSError * _Nullable error) {
    // 获取返回值 response
    }];
  • WKUserScript

可以控制注入时机,其中参数injecttionTime设置为WKUserScriptInjectionTimeAtDocumentEnd为网页加载完成时注

WKUserScript *wkcookieScript = [[WKUserScript alloc] initWithSource:self.javaScriptString
                                                          injectionTime:WKUserScriptInjectionTimeAtDocumentStart
                                                       forMainFrameOnly:NO];
[webView.configuration.userContentController addUserScript:wkcookieScript];

相关文章

网友评论

      本文标题:27期_iOS_浅谈JS Bridge

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