目录:
1.webview概述
2.webview常用方法
3.webview基本使用
3.1 真的基本使用(还有假的吗?白眼)
3.2 cookie处理
3.3 缓存处理
3.4 页面导航处理
3.5 缩放与窗口管理
4.webview相关类介绍
4.1 相关类思维导图
4.2 webSettings
4.3 WebViewClient
4.4 WebChromeClient
5.webview与javascript
6.webview加载URL或本地网页
1.webview概述
webview是SDK中封装的一款基于webkit内核(后面开始基于Chromium内核)的浏览器组件,通过它我们可以实现网页的展示,实现某些实时性强的内容的更新,现在流行的混合型移动端其实最大一点好处就是可以实现热更新,webview其实也有那么一点意味在里面。
2.webview常用方法
//后退到上一页面
webView.goBack();
//前进到下一页面
webView.goForward();
//前进或者后退指定的页面数
webView.goBackOrForward(2);
//滑动到页面顶端
webView.pageUp(true);
//滑动到页面底端
webView.pageDown(true);
//以当前的页面为基准,判断是否webview的历史记录可以实现前进和后退指定的页数,正数向前,负数向后
webView.canGoBackOrForward(-2);
//判断webview的历史记录是否还可以实现回退
webView.canGoBack();
//判断webview的历史记录里面还可以实现向前
webView.canGoForward();
//清空网页的缓存数据,true表示全清空,false表示只清空内存资源缓存,不清空磁盘里面的
webView.clearCache(true);
//清除访问历史记录
webView.clearHistory();
//清空当前表单域中的表单数据
webView.clearFormData();
//加载指定网页
webView.loadUrl("https://www.baidu.com");
//获取当前页面的URL
webView.getUrl();
//重新加载当前的URL
webView.reload();
3.webview基本使用
3.1 真的基本使用(还有假的吗?白眼)
我们先实现一个webview的简单使用,不添加任何添加剂,纯天然的webview~~~
(1)布局文件activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.webview.MainActivity">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</WebView>
</RelativeLayout>
(2)Java文件实现绑定并加载一个简单的网页
package com.example.webview;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.webkit.WebView;
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView= (WebView) findViewById(R.id.webView);
//加载指定网页
webView.loadUrl("https://www.baidu.com");
}
}
(3)别忘了manifest.xml添加网络访问权限
<!--添加网络访问权限-->
<uses-permission android:name="android.permission.INTERNET"/>
ok,纯天然webview制作完成,看看效果先
妈蛋,说好的内置呢,跟说好的不一样啊,为毛是调用系统的浏览器?好吧,看来的继续研究研究。
3.2 cookie处理
(1)cookie概述
在webview中设置cookie的主要作用是方便我们的native部分与我们的H5部分实现某些信息的同步,比如某个需要登录的应用,当你在native部分登录
但是某些操作需要在H5部分进行,这时候cookie同步就可以派上用场了。
(2)cookie同步的实现
(2.1)native部分从服务端获取发送给H5端,然后H5端通过ajax(异步JS和xml)接收,这里设计ajax交互我也不是很懂就不多做讲解
(2.2)将本地的cookie数据直接同步到webview中
webview的cookie保存在data/data/包名/databases/webviewCookiesChromium.db(我的Android模拟器版本是4.3的,之前的版本应该会有不一样)下面
当webview需要加载URL的时候就将这个数据库保存的对应的cookie同步上去,再与服务器交互的。
(2.3)cookie同步类CookieManager/CookieSyncManager
URL url=null;
URLConnection conn= null;
String cookie=null;
try {
url=new URL("http://www.baidu.com");
//定义访问URLConnection请求
conn = url.openConnection();
//URLConnection获取响应头中的cookie信息
cookie = conn.getHeaderField("Set-Cookie");
} catch (Exception e) {
e.printStackTrace();
}
//httpClient获取cookie
// List Cookies = httpClient.getCookieStore().getCookies();
//判斷API版本是否小于21,小于21版本的需要CookieSyncManager来进行同步
if (Build.VERSION.SDK_INT<Build.VERSION_CODES.LOLLIPOP){
CookieSyncManager syncManager=CookieSyncManager.createInstance(this);
//更新cookie操作
//啓動同步,在更新cookie后同步时调用
syncManager.sync();
}
//獲取有一个cookieManager实例
CookieManager cookieManager = CookieManager.getInstance();
//同步cookie setCookie(String url, String value)
cookieManager.setCookie("http://www.baidu.com",cookie);
3.3 缓存处理
(1)缓存的应用概述
缓存的应用场景主要在一些需要频繁更新的的内容类APP,例如:资讯类,新闻类,阅读类,大多这类APP都有在没网的情况下阅读的需求
而缓存的应用恰好就在这里,它可以实现在有网的时候提前缓存你的网页内容,当你在没网的情况下,打开时它通过加载缓存中的内容展示给你,从
而实现离线缓存。
(2)缓存分类
(3)缓存处理的方式
LOAD_CACHE_ONLY//不使用网络只读取本地缓存数据
LOAD_DEFAULT//根据cache-control决定是否从网络获取
LOAD_CACHE_NORMAL//API 17以后弃用
LOAD_NO_CACHE//从网络获取
LOAD_CACHE_ELSE_NETWORK//如果有本地缓存则从本地获取,如果没有则从网络获取
(4)缓存与删除缓存案例
--1.MainActivity.java
package com.example.webview;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private WebView webView;
private Button clearCacheBt;
private static final String url="http://36kr.com/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate