本文收录一些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; }
注意:
- 同步cookie要在WebView加载url之前,否则WebView无法获得相应的cookie,也就无法通过验证。
- 每次登录成功后都需要调用”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同步问题)