zoukankan      html  css  js  c++  java
  • Webview 与h5的交互

    步骤:H5代码
     
    <html>
     
    <head>
     
    <meta charset="UTF-8">
     
    <title>交互Demo</title>
     
    <meta content="initial-scale=1.0,user-scalable=no,maximum-scale=1,width=device-width" name="viewport">
     
    </head>
     
     
     
    <body>
     
    getUserinfo:<br>
     
     
     
    <input value="立即报名" type="button" onClick="baoming();" /><br>
    <input value="详细信息" type="button" onClick="baoming1();" /><br>
    <input value="你好" type="button" onClick="baoming2();" /><br>
     
     
     
    <script>
     
    /*var rs=window.om.getUserinfo();
     
    document.getElementById('userinfo').innerHTML=rs;*/
     
    var rs=window.demo.getUserinfo();
     
    var obj = eval ("(" + rs + ")");
     
    if(obj.status){
     
    document.getElementById('userinfo').innerHTML=obj.data.nickname;
     
    }
     
     
    function baoming(){
     
    if(window.demo.needLogin()){
     
    location.href='http://www.cnblogs.com/greatverve/archive/2012/03/08/android-assets.html';
     
    }
     
    }
     
    function baoming1(){
     
    if(window.demo.getUserinfo()){
     
    location.href='http://www.cnblogs.com/greatverve/archive/2012/03/08/android-assets.html';
     
    }
    }
    function baoming2(){
     
    if(window.demo.getData("红红火火")){
     
    location.href='http://www.cnblogs.com/greatverve/archive/2012/03/08/android-assets.html';
     
    }
     
    }
     
    </script>
     
    </body>
     
    </html>
     
    android 端需要写的代码
     
    1:在XML 布局声明一个WebView
    2:通过 loadUrl 加载本地文件或者网络文件
    3:设置可以使用JavaScript,代码如下:
    web_main.getSettings().setJavaScriptEnabled(true); //加上这句话才能使用javascript方法
    具体安卓调用H5 的格式是: web_main.loadurl("javaScript:方法名");(方法名来自于H5 的方法名)
    注意:安卓调用H5必须在主线程进行.
     
    H5 调用安卓的方法::web_main.addJavascriptInterface(new PayJavaScriptInterface(), "demo");
    后面有个参数:第一个是自定义类的实例化,第二个参数是自定义的名字(名字随便起),这个字段是为了让H5调用安卓的时候用的,//H5 调用Android 的格式 Window.第二个参数.方法名
    4:定义一个类,类名叫PayJavaScriptInterface,里面有三个方法:分别是:getUserinfo,needLogin,getData,代码如下:
     
    final class PayJavaScriptInterface {
     
     
    PayJavaScriptInterface() {
     
    }
     
    @JavascriptInterface
     
    public String getUserinfo() {
     
     
    Toast.makeText(getApplicationContext(),"报名",Toast.LENGTH_LONG).show();
     
    return "dd";
    }
     
    @JavascriptInterface
    public boolean needLogin() {
     
    Toast.makeText(getApplicationContext(),"登陆",Toast.LENGTH_LONG).show();
     
    return false;
    }
     
    @JavascriptInterface
    public void getData(String name){
     
    Toast.makeText(getApplicationContext(),name,Toast.LENGTH_LONG).show();
    }
     
    }
     
    //注意 自定义类,类名自己起,类里面的方法要与H5里面调用的方法名一致(可以和H5商量着起)
    5:通过web_main.addJavascriptInterface让H5调用Android的方法,其中的两个参数的意思分别是:
    第一个参数:定义类的实例化
    第二个参数:自定义名字,让H5来调用安卓的方法
    代码如下:web_main.addJavascriptInterface(new PayJavaScriptInterface(), "demo");
     
    在H5中调用安卓的方法是:window.第二个参数(自定义名字).方法名
    案例如下:
    window.demo.needLogin()
     
    Android 调用H5的方法:
    格式如下:控件名.loadUrl("javascript:方法名")
    代码如下:web_main.loadUrl("javascript:getData()");
     
    声明:Android 调用H5 必须在主线程中调用,
     
    方法1:
    使用Handler代码如下:
     
    //主线程
    Handler handler = new Handler(){
     
    @Override
    public void handleMessage(Message msg) {
    super.handleMessage(msg);
     
    switch (msg.what){
     
    case 1:
    web_main.loadUrl("javascript:baoming3()"); //aa是js的函数test()的参数
    break;
    }
    }
    };
     
    //发送消息到主线程的方法
     
    Message msg = handler.obtainMessage();
    msg.what = 1;
    handler.sendMessage(msg);
    方法2:控件名.post(实例化线程)
    web_main.post(new Runnable() {
    @Override
    public void run() {
    web_main.loadUrl("javascript:baoming3()"); //aa是js的函数test()的参数
    }
    });
     
     
    面试技巧:
     
    Android 与H5 交互最主要有俩方法;
    1:控件名.getsetting.setJavaScriptEnable设置为true
    这个时候我们就能安卓调用J5的方法,
    安卓调用H5 只需要一句话,
    控件名.loadurl("javaScript:方法名"),但是这句话必须在主线程调用
     
    第二个设置是 H5调用安卓的时候需要设置的,
    是控件名.addJavaScriptInterface(),里面有俩参数,第一个参数是H5调用我们安卓方法需要封装的一个类的实例化,第二个参数是我们自定义的名字,H5调用安卓的时候用的,因为H5调用安卓的时候格式是 window.第二个参数.第一个类里面的方法名,但是里面类里面的方法方面必须加一句话 @javaScriptInterface 这个在安卓4.4以后H5才能调的动安卓的方法
  • 相关阅读:
    11.tp5常见漏洞
    10.tp3常见漏洞
    1.linux分析排查
    3.docker镜像探究
    1.docker概述
    4.docker常用命令
    2.docker安装
    3.windows分析排查
    9.thinkphp框架模型
    2.win2k8搭建asp网站
  • 原文地址:https://www.cnblogs.com/fanzhiguo/p/6023448.html
Copyright © 2011-2022 走看看