WebView相关

本文收录一些WebView相关的文章:

1.加载方式

  • 加载服务器上的一个网页:
    webView.loadUrl(“http://www.baidu.com/“);

  • 加载apk包中的一个html页面
    webView.loadUrl(“file:///android_asset/test.html”);

  • 加载手机本地的一个html页面的方法:
    webView.loadUrl(“content://com.android.htmlfileprovider/sdcard/test.html”);


2.通过H5打开app

scheme与host是自己定义的,只要与H5中对应即可。

<activity 
    android:name="com.example.elson.WelcomeActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait">  
    <data 
        android:scheme="http:" 
        android:host="com.aaa.bbb"/>  
    <action  
        android:name="android.intent.action.VIEW" />  
    <category 
        android:name="android.intent.category.DEFAULT" />  
    <category 
        android:name="android.intent.category.BROWSABLE" />   
</activity>  

3.Java调用JS代码

// 1.Java调用H5
webView.loadUrl("javascript:methodName(parameterValues)");

4.JS调用Java代码

注意: 被H5调用的Java方法不能用private修饰,否则调用不成功;

// 1.初始化  传入的this,表示回掉的方法在this对象当中, android表示H5所调用的对象。
mWebView.addJavascriptInterface(this, "android");

HTML代码:(代码摘自网上)

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>H5 And Android</title>
        <script>
            //定义本地方法 效果提供给Android端调用   被调用后将获得参数值
            function callH5(data){  
                document.getElementById("result").innerHTML="result success for Android to:"+data;  
            }  

            //定义本地点击事件 效果调用Android方法 传递参数给Android客服端
            function myOnclick(){
                document.getElementById("result").innerHTML="按钮被点击了"
                //2. 调用android本地方法  调用对象由Android定义实例化,调用方法由Android提供 (具体对象名和方法待定,可变更)
                android.callAndroid("弹窗显示回调成功了~~~");
            }
        </script>
    </head>

    <body>
        <button id="button" onclick="myOnclick()">点击调用Android方法</button>
        <p/>
        <div id="result">效果展示</div>
    </body>
</html>



// 3.被H5调用的方法要使用@JavascriptInterface注解
@JavascriptInterface
void callAndroid(String phone) {
    ToastUtils.showShortToast(this, phone);
}

5.Cookie 相关

  • 将cookie同步到WebView(推荐)
    WebView是基于webkit内核的UI控件,相当于一个浏览器客户端。它会在本地维护每次会话的cookie(保存在data/data/package_name/app_WebView/Cookies.db)。

    /**
     * 将cookie同步到WebView
     * @param url WebView要加载的url
     * @param cookie 要同步的cookie
     * @return true 同步cookie成功,false同步cookie失败
     */
    public static boolean syncCookie(String url,String cookie) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {   
            CookieSyncManager.createInstance(context);
        }  
        CookieManager cookieManager = CookieManager.getInstance();
        //如果没有特殊需求,这里只需要将session id以"key=value"形式作为cookie即可
        cookieManager.setCookie(url, cookie);
        String newCookie = cookieManager.getCookie(url);
        return TextUtils.isEmpty(newCookie)?false:true;
    }

    注意:

    1. 同步cookie要在WebView加载url之前,否则WebView无法获得相应的cookie,也就无法通过验证。
    2. 每次登录成功后都需要调用”syncCookie”方法将cookie同步到WebView中,同时也达到了更新WebView的cookie。如果登录后没有及时将cookie同步到WebView可能导致WebView拿的是旧的session id和服务器进行通信。

6.避免WebView内存泄露的一些方式

参照官方WebViewFragment的写法:


7.将WebView设置成透明的

WebView.setBackgroundColor(Color.parseColor("#00000000")); 带透明度的颜色值


参考文章:

Android Web Apps Using Android WebView
WebView·开车指南
Android WebView的Js对象注入漏洞解决方案
史上最全WebView使用,附送Html5Activity一份
WebView的cookie机制(轻松搞定WebView cookie同步问题)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值