Android WebView技术详解和经验分享

WebViewJS相互通信

WebView调用JS函数

通用方式,不能获取JS函数的返回值:

webView.loadUrl("javascript:alert('hello world');");

 

Android 4.4.及以上系统的WebView专用方式,可以获取JS函数的返回值:

webView.evaluateJavascript("javascript:add(2,3)", new ValueCallback<String>() {
    @Override
    public void onReceiveValue(String value) {
        Log.i("tag",value);
    }
});

 

JS调用Native函数

首先,需要通过WebView提供的函数注册JS对象
public class AndroidJSInterface {
    @JavascriptInterface //注意,所有可被JS调用的函数,一定要加上@JavascriptInterface,否则JS无法调用
    public String handler(String action, String value){
        return "";
    }
}

 

webView.addJavascriptInterface(new AndroidJSInterface(),"Android");
JS调用Native提供的handler函数的代码示例如下:
window.Android.handler("sayHello","hello world");
 
其中Android对象就是我们通过addJavascriptInterface()函数注册的JS对象
JS调用Native对象,支持有返回值的函数和没有返回值的函数
JS调用Native函数的时候,建议通过JSON数据来传值,不然的话,可能会出现调用失败的情况
比如:
window.Android.handler("sayHello",JSON.stringify(obj));
JS不再使用Native对象时,可以把Native对象注销掉
webView.removeJavascriptInterface("Android");

WebView加载URLHTML字符串的方法

WebView加载指定的url

不带http header
webView.loadUrl(mUrl);
http header
Map<String,String> httpHeaders=new LinkedHashMap<>();
httpHeaders.put("userName","kgdwbb");
webView.loadUrl(mUrl,httpHeaders);

WebView加载html片段

webView.loadData("<h1>title</h1>","text/html; charset=utf-8", null);

这里有一个问题,就是当webView.loadData()函数第三个参数传入页面的字符编码的时候,不起作用,可能是这个函数本身的问题

我的解决方法就是在第二个参数里面传入页面的字符编码,比如charset=utf-8,如果不显示指定页面的字符编码,在显示中文的时候可能会出现乱码的情况

WebView 发送POST请求

代码示例:

webView.loadUrl(mUrl);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值