美文网首页
关于html与OC的交互

关于html与OC的交互

作者: 今年27 | 来源:发表于2020-04-01 11:24 被阅读0次

在iOS开发中OC与JS之间的交互是很重要的,这里稍微总结一下

1.通过获取JSContext的方式直接调用OC方法

-(void)webViewDidFinishLoad:(UIWebView *)webView
{
    self.jsContext =  [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

    __weak typeof(self) weakSelf = self;
    self.jsContext[@"getMessage"] = ^(){
        return [weakSelf blockCallMessage];
    };
}

- (NSString *)blockCallMessage
{
    return @"call via block";
}

2.通过继承自JSExport的方式调用delegate中的方法

-(void)webViewDidFinishLoad:(UIWebView *)webView
{
    self.jsContext =  [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    // 方法二
    self.jsContext[@"JavaScriptInterface"] = self;
}

#pragma mark - JSCallDelegate
  // 提供给JS调用的方法
- (NSString *)tipMessage
{
    return @"call via delegate";
}

3.截取URL的方式(此种方式资料很多,就不写了)

OC调用JS的方法

WKWebKitView是这样的

NSString *doc = @"document.body.outerHTML";
[self.myWebView evaluateJavaScript:doc  
                 completionHandler:^(id _Nullable htmlStr, NSError * _Nullable error) {
    if (error) {
       NSLog(@"JSError:%@",error);
    }
    NSLog(@"html:%@",htmlStr);
}] ;

以前用UIWebView是这样的

 [webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');"  
  "script.type = 'text/javascript';"  
 "script.text = \"function myFunction() { "  
  "var field = document.getElementsByName('q')[0];"  
 "field.value='xxxxxx';"  
  "document.forms[0].submit();"  
  "}\";"  
 "document.getElementsByTagName('head')[0].appendChild(script);"];  
 [webView stringByEvaluatingJavaScriptFromString:@"myFunction();"];

附html代码

<html>
<head>
</head>
<body>
    <script>
        function buttonClick1()
        {
            // 方法一
             var token = getMessage();

            alert(token)
        }
        function buttonClick2()
        {
            // 方法二
            var token = JavaScriptInterface.tipMessage();
        
            alert(token)
        }
        </script>
    <button id="abc" onclick="buttonClick1()">function 1</button>
    <button id="abcd" onclick="buttonClick2()">function 2</button>
</body>
</html>

相关文章

网友评论

      本文标题:关于html与OC的交互

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