OC与JS交互UIWeView(一)

来源:互联网 发布:淘宝天弘基金在哪 编辑:程序博客网 时间:2024/05/29 02:04

        随着h5的兴起,原生app与h5页面交互的场合越来越多,UIwebView相对于WkWebView已经非常成熟用法也非常简单无需配置,下面我来介绍一下在UIWebView下与js的简单方法调用

在UIWebView中与js交互还需要借用JavaScriptCore

1,新建一个OC工程

2,在页面加入一个UIWebView控件,并且实现代理。

//是否允许html页面加载或者跳转,可在此处根据navigationType或者request拦截页面跳转类型- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{    return YES;}//页面开始加载- (void)webViewDidStartLoad:(UIWebView *)webView{    }//页面加载结束- (void)webViewDidFinishLoad:(UIWebView *)webView{}//页面加载失败- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{    }

3,写一个简单的html文件并且包含JavaScript语言

<html><header><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript">function jsAlert(){    alert('这是JS方法弹出框');}function JStoOC(){    OCAlert();}</script></header><body><br/><h2> 这里是一个HTML页面 </h2><br/><form name="myform" onsubmit="return JStoOC()"><button type="submit">去调用OC弹出框</button></form></body></html>


4,在OC文件里面调用js和接收js回调处理,记得首先引入js框架

#import <JavaScriptCore/JavaScriptCore.h>

//页面加载结束- (void)webViewDidFinishLoad:(UIWebView *)webView{    JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];    context[@"JStoOC"] = ^() {//接收js的回调,其中JStoOC即为方法名如果有参数可在^()中加入        [self OCAlert];    };}//页面加载失败- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{    }- (IBAction)onClickToJSAlert:(UIButton *)sender {    JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];    [context evaluateScript:@"jsAlert()"];//调用js方法jsAlert即为js方法名}- (void)OCAlert{    UIAlertAction *action = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {            }];    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"OC" message:@"这是OC弹出框" preferredStyle:UIAlertControllerStyleAlert];    [alertVC addAction:action];    [self presentViewController:alertVC animated:YES completion:nil];}


5,demo地址下载http://download.csdn.net/detail/u010067452/9746291




0 0
原创粉丝点击