zoukankan      html  css  js  c++  java
  • iOS 利用UIWebView与JavaScript交互的最简单办法

      

    这里说的是针对iOS的!并且方法很简单!!并且验证可行的!!!

    1, UIWebView调用 JavaScript 的函数:

    NSString* strValue = [webView stringByEvaluatingJavaScriptFromString:@"YourFunctionName('YourParameter')"];

    上面这句就是调用 JavaScript里面自定义的函数 YourFunctionName(传入参数'YourParameter',取得返回值赋给strValue )

    2,JavaScript (通过UIWebView)调用ObjC方法:

    下面说到的是最简单、最通用的办法!!脚本写完之后可以丢到Android执行的:

    就是利用UIWebView(Android的是WebView)拦截URL的功能!!!约定一个特殊URL,写在脚本,让上层去拦截分析!!比如,

    在JavaScript写上:

    window.location.href = "ABCD://XXXYYYZZZ"

    在iOS里面:

    实现UIWebViewDelegate下面这个函数(不要忘记设置 webView.delegate = self 这样细节) 

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

    {

              NSString* strXXX = request.URL.resourceSpecifier;

              //假设只是分析 "ABCD://"

                NSRange range = [strXXX rangeOfString:@"ABCD://"]; 
                 if( range.location != NSNotFound ) 
                 { 
                        //就在这里执行操作了!!!

                 
                       return NO;//返回NO,表示取消对本次请求的导航 

                  }

            return YES; 

    //Android里面,利用WebView 重载这个函数也可以做到同样效果 

    public boolean shouldOverrideUrlLoading(WebView  view, String url) { 

    return true; 
    }

    这样,当JavaScript执行 window.location.href = "ABCD://XXXYYYZZZ" 这句,就触发上层的对应操作了!

    也就是实现JavaScript调用上层ObjC函数的功能了 

  • 相关阅读:
    HEVC软件记录
    怪诞行为学
    docker学习实践之路[第一站]环境安装
    centos系统(ssh)登录缓慢(输入账户密码后需要等待若干时间)
    CentOS7.x编译安装nginx,实现HTTP2
    vs 2017 IIS EXPRESS 增加局域网访问
    nginx在centos 7中源码编译安装【添加grpc的支持】
    docker学习实践之路[第五站]mysql镜像应用
    docker学习实践之路[第四站]利用pm2镜像部署node应用
    docker学习实践之路[第三站]node站点部署
  • 原文地址:https://www.cnblogs.com/jgCho/p/4992645.html
Copyright © 2011-2022 走看看