iOS开发JS调用OC

在开发中时常会用到webView,当用到webView加载页面的时候,对于开发方便了很多,但是也会遇到一个问题:webView和iOS原生页面如何进行交互。

点击webView的某个按钮,iOS原生页面需要进行相应,如何实现?

//点击按钮功能,JS调用OC拦截请求

    var u = navigator.userAgent.toLowerCase();

    var isApple = /(iphone|ipad|ipod|ios)/i.test(u);

    var isAndroid = /android/i.test(u);

    $("#close").on('click',function () {

      var u = navigator.userAgent.toLowerCase();

      if(isApple){

          //apple终端

          window.location = 'close://';

      }else if(isAndroid){

          //安卓终端

          if(window.AndroidBridge){

              window.AndroidBridge.close();

          }

      }

    });

以上代码是加在webView的按钮中的(iOS开发人员看不明白的话,给公司相应的写js的工作人员看就可以了)。

在加在webView的页面声明属性

@property (nonatomic, strong, readonly) JSContext *jsContext;

加载webView

UIWebView *wkWebView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 64, ScreenWidth,ScreenHeight-64)];

    wkWebView.backgroundColor = [UIColor whiteColor];

    wkWebView.delegate = self;

    NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"需要加在的页面链接"]];

    [wkWebView loadRequest:request];

    self.wkWebView = wkWebView;

    [self.view addSubview:self.wkWebView];

webView的代理方法

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{

    //�➡️第一种方案,JS发起一个假的URL请求,然后拦截这次请求,再做相应的处理⬅️

    NSString *scheme = [request.URL scheme];

    scheme = [scheme lowercaseString];

    if ([scheme isEqualToString:@"close"]) {

        NSLog(@"拦截了close操作");

        return NO;

    }

    return YES;

}

你可能感兴趣的:(iOS开发JS调用OC)