iOS-JS調用OC代碼

設計思路

  1. 創(chuàng)建WKWebViewConfiguration對象,配置該對象的userContentController屬性,這里需要注冊html中預留的接口“jsCallOC”
    WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc]init];
    
    //2.配置JS
    WKUserContentController *userContentController = [[WKUserContentController alloc]init];
    //定義了js中將要調用oc的方法名
    //注冊html中預留的接口jsCallOC
    [userContentController addScriptMessageHandler:self name:@"jsCallOC"];
    config.userContentController = userContentController;
  1. 創(chuàng)建wkwebView對象
    //3.顯示wkWebView
    self.webView = [[WKWebView alloc]initWithFrame:CGRectMake(10,100,200,400) configuration:config];
    self.webView.UIDelegate = self;
    [self.view addSubview:self.webView];
    
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"html"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [self.webView loadRequest:request];
  1. 準備HTML代碼,創(chuàng)建一個button,點擊button之后會調用
    window.webkit.messageHandlers.jsCallOC.postMessage(dict)方法,該方法會將字典數(shù)據(jù)傳遞給oc代碼層。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>This is a testing</title>
</head>
<body>
        <h1>Tested Html</h1>
        <button name="Click Me" type="button" onclick="onClickButton()" style="width: 100px; height: 30px;"></button>
        
        <script type="application/javascript">

            function onClickButton() {
                var list = [1,2,3];
                var dict = {"name" : "陽君","qq":"3300333221","data":"123","array":list};
                alert(dict);
                window.webkit.messageHandlers.jsCallOC.postMessage(dict);
            }

        </script>
</body>
</html>
  1. OC代碼層會響應js的事件傳遞,并調用userContentController: didReceiveScriptMessage方法。這里可以做相應的操作。
//這里取得oc的方法名
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{
    NSLog(@"方法名:%@",message.name);
    NSLog(@"參數(shù)名:%@",message.body);
    
    //方法名
    NSString *methods = [NSString stringWithFormat:@"%@:",message.name];
    SEL selector = NSSelectorFromString(methods);
    
    //調用方法
    if ([self respondsToSelector:selector]) {
        [self performSelector:selector withObject:message.body];
    }else{
        NSLog(@"未實行方法:%@",methods);
    }
}

-(void)jsCallOC:(id)body{
    NSLog(@"jsCallOC function called");
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容