android iOS WebView 和 JS 交互对比

  • 交互前的准备工作
  • 交互的入口
  • 项目方法调用JS
  • JS调用项目方法

交互前的准备工作

  • android :
    1:在webview添加对js的支持
     WebSettings setting = webView.getSettings();        setting.setJavaScriptEnabled(true);
 `2:设置setWebViewClient和setWebChromeClient` 
      webView.setWebViewClient(new WebViewClient(){        });        webView.setWebChromeClient(new WebChromeClient(){        });
  • IOS : 基本上不需要做什么操作

交互的入口

android ios
webView.loadUrl("file///:xxxx.html") [self.webView loadRequest:request];

项目方法调用JS

android ios
webView.addJavascriptInterface(new AndroidToastForJs(mContext), "JavaScriptInterface"); [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('header')[0].remove();"]

JS调用项目方法

JS调用项目方法 需要在Js和项目代码里面定义好协议,然后通过项目代码拦截JS来执行相应的操作

在android 里需要在复写webViewClient里shouldOverrideUrlLoading 方法

  @Override  public boolean shouldOverrideUrlLoading(WebView view, String url) {       String  requestUrl = url;       //TODO 拦截请求做相应的操作       return super.shouldOverrideUrlLoading(view, url);    }

在IOS 里需要实现UIWebViewDelegate 里shouldStartLoadWithRequest 方法

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{    NSString *requesrUrl = request.URL.absoluteString;    //TODO 拦截请求做相应的操作    return YES;}

调用项目中对于的方法:

android : 在Html 中执行window.location.href = “android//openTestJS”调用对应的方法:

    //在HTML中执行的JS代码:window.location.href = "android://openTestJS"    class  MyWebViewViewClient extends  WebViewClient{        @Override        public boolean shouldOverrideUrlLoading(WebView view, String url) {           if(url.length() !=0 && url.startsWith("android://"))               int index = url.indexOf("android://");                //获得方法名               String methodName = url.substring(index);               // 通过方法名反射获得方法               Method  method = this.getClass().getDeclaredMethod(methodName);               //执行该方法               method.invoke(this);           }            return super.shouldOverrideUrlLoading(view, url);        }    }    /**Android自己项目里面的代码*/    public  void  openTestJS(){        LogUtils.e("我被调用了...");    }

IOS :在Html 中执行window.location.href = “ios//openTestJS”调用对应的方法:

//在HTML中执行的JS代码:window.location.href = "ios//openTestJS"-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{    NSString *requesrUrl = request.URL.absoluteString;    NSRange range = [requesrUrl rangeOfString:@"ios://"];    if (range.length != 0) {        //1.截取方法名        NSString *method = [requesrUrl substringFromIndex:range.location + range.length];        //2.将字符串的方法名转为Selector类型        SEL  selector = NSSelectorFromString(method);        //3.执行项目里对于的方法        [self performSelector:selector withObject:nil];    }    return YES;}//自己项目里面的代码-(void) openTestJS{    NSLog(@"我被调用了....");}

PS:明显感觉到 IOS在webView和JS交互中更容易操作!

更多相关文章

  1. Android中两种设置全屏的方法 && Android横竖屏切换
  2. Android 保存文件路径方法
  3. 阻止一进入页面就弹输入法对话框的方法
  4. Android中SQLiteOpenHelper类的onUpgrade方法的作用
  5. android TabHost(选项卡)的使用方法
  6. Android使用系统方法实现分享到QQ和微信!
  7. Android多种方法获取系统时间
  8. Android 项目实例config.gradle配置

随机推荐

  1. Android开发100G文档知识大全资料集合
  2. 知识梳理之Android进程
  3. Android(安卓)去掉 Launcher3 里面默认的
  4. android进阶
  5. android:gravity
  6. android 电池(三):android电池系统
  7. 设置textview的字体
  8. Android(安卓)xmlns 的作用及其自定义
  9. Android(安卓)图表开源框架之MPAndroidCh
  10. Android(安卓)Handler机制1之Thread