美文网首页我爱编程
IOS与JS交互常用方法

IOS与JS交互常用方法

作者: 锦箫_1 | 来源:发表于2018-05-17 14:53 被阅读125次

    最近项目中涉及到的功能点主要集中于与JS交互。在网上看了有三种方法可以实现H5页面跳转APP原生页面。

    因为我们是混合开发,在APP中的H5页面也经常用于与触屏版,于是我选择用了JS代理方法进行监听这样的形式。

    首先创建一个webview.

      //初始化webview
        _webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
        //实现webview代理
        _webView.delegate = self;
        
        [self.view addSubview:self.webView];
        _webView.backgroundColor = [UIColor clearColor];
        //需要加载的网页
        NSURL *url = [NSURL URLWithString:@"http://cpb.saclub.com.cn/jsp/coupon/couponList1.jsp"];
    //这里_webView.opaque = false可实现网址在背景透明状态下展示,如果不写,即使H5为透明,在webview中也无法展示。
        _webView.opaque = false;
        _webView.scrollView.scrollEnabled = NO;
        [self.webView loadRequest:[NSURLRequest requestWithURL:url]];
    

    实现webview的代理方法

    #pragma webViewDelegate
    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
    {
     //获取当前点击button的点击事件跳转链接。或者获取当前a标签的跳转链接
        NSString *requestString = [[request URL] absoluteString];
        //判断是否相同,如与约定的相同,进行跳转
        if ([requestString isEqualToString:@"http://cpb.saclub.com.cn/account.do?act=getCountInfo"]) {
            OneViewController *theOne = [[OneViewController alloc]init];
            [self presentViewController:theOne animated:YES completion:nil];
    //当为 return NO;时即为不执行JS的点击事件
            return NO;
        }
        return YES;
    }
    
    

    这样的方法对于我本次项目中的需求是完全满足的,这样有利于触屏版和APP的兼容,不需要前端人员再次编写其它版本代码。

    附:
    清除webview在加载H5后清除缓存方法。

    - (void)cleanCacheAndCookie{
        //清除cookies
        NSHTTPCookie *cookie;
        NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
        for (cookie in [storage cookies]){
            [storage deleteCookie:cookie];
        }
        //清除UIWebView的缓存
        [[NSURLCache sharedURLCache] removeAllCachedResponses];
        NSURLCache * cache = [NSURLCache sharedURLCache];
        [cache removeAllCachedResponses];
        [cache setDiskCapacity:0];
        [cache setMemoryCapacity:0];
    }
    

    原生返回按钮操作H5页面,一级一级返回

    //返回上一级
    - (void)clickBackButton{
        BOOL canBack = [webView canGoBack];
        if (canBack) {
            [webView goBack];
            
        }else{
            [self dismissViewControllerAnimated:NO completion:nil];
        }
        
    }
    

    以上内容均来自项目实践。
    如有雷同,纯属巧合
    欢迎各路大神前来指导,联系:QQ:1037883965 O(∩_∩)O谢谢

    相关文章

      网友评论

        本文标题:IOS与JS交互常用方法

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