• 安卓原生与hml交互(WebView基础)


    • WebView加载页面

    webView有两种加载方式,

    加载网络地址

    webView.loadUrl("www.xxx.com/index.html");

    加载本地资源

    webView.loadUrl("file:///android_asset/example.html");
    • 添加请求头信息,在这里可以加入认证信息等等
    Map<String,String> map=new HashMap<String,String>();
    map.put("taken","1234");
    webView.loadUrl("http://192.168.99.101:8080/xiaoyanAPI/test1",map);
    • 设置页面内链接跳转,拦截了跳转事件,在相应函数中做对应的处理。
    webView.setWebViewClient(new WebViewClient() {
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);
                    return true;
                }
            });
    • 设置允许js方法执行
            WebSettings webSettings=webView.getSettings();
            webSettings.setJavaScriptEnabled(true);
    • 返回键返回上个页面(默认webView将页面存放到缓存栈中)
    @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                if (webView.canGoBack()) {
                    webView.goBack();//返回上一浏览页面
                    return true;
                } else {
                    finish();//关闭Activity
                }
            }
            return super.onKeyDown(keyCode, event);
        }
    • 安卓调用html的js方法

    调用无返回值方法可去掉后面的回掉函数,该函数接受js函数返回的数据。

     mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
                Log.e(TAG, "onReceiveValue value=" + value);
            }
        });
    • js调用安卓原始里的方法。

    在Android4.2以上可以直接使用@JavascriptInterface注解来声明,下面是在一个本地Java方法

     public class JsInteration {
        @JavascriptInterface
        public String back() {
            return "hello world";
        }
    }

    定义完这个方法后再调用mWebView.addJavascriptInterface()方法:

     mWebView.addJavascriptInterface(new JsInteration(), "android");

    那么在js中怎么来调用呢?

    <script type="text/javascript">
         function s(){
         //调用Java的back()方法
        var result =window.android.back();
        document.getElementById("p").innerHTML=result;
        }
    
    </script>
  • 相关阅读:
    20.GC日志详解及日志分析工具
    19.JVM调优工具锦囊
    两个页面的传参(转自博客园的春哥也编程)
    纯js实现背景图片切换
    关于引用类型用ref传参的问题
    C++ return
    C++内存管理
    Chrome插件开发一(配置文件)
    C++对象传递
    const 与 #define 的比较
  • 原文地址:https://www.cnblogs.com/wuyoucao/p/6785518.html
Copyright © 2020-2023  润新知