首页 > 代码库 > Android WebView 研发教程

Android WebView 研发教程

声明在先:必须在AndroidMainfest.xml 里面声明权限,否则在Java里面编写的所有WebView浏览网页的代码都无法正常使用

<uses-permission android:name="android.permission.INTERNET" />  

 

1.WebView的使用

(a). 创建WebView的实例加入到Activity中

WebView webview = new WebView(this);  setContentView(webview);  

或者在xml中配置WebView

<Webview      android:layout_width="match_parent"      android:layout_height="match_parent" >  </Webview>  

(b). 访问网页

webview.loadUrl("https://www.baidu.com/");  

 

2.WebView API使用详解

(a). 请求加载网页部分
public void loadData (String data, String mimeType, String encoding)  

加载指定的data数据

参数说明:

data  字符串String形式的数据 可以通过base64编码而来

mineType data数据的 MIME类型, e.g. ‘text/html‘

encoding data数据的编码格式

注意:

1.Javascript有同源限制,同源策略限制了一个源中加载文本或者脚本与来自其他源中的数据交互方式。避免这种限制可以使用loadDataWithBaseURL()方法。

2.encoding参数制定data参数是否为base64或者 URL 编码,如果data是base64编码那么 encoding必须填写 "base64“。

————————————————————————————————————————————————————

public void loadDataWithBaseURL (String baseUrl, String data, String mimeType, String encoding, String historyUrl)  

使用baseUrl加载base URL的网页内容,baseUrl解决相关url使用Javascript相同源问题。

————————————————————————————————————————————————————

public void loadUrl (String url)  

加载制定url的网页内容

————————————————————————————————————————————————————

public void loadUrl (String url, Map<String, String> additionalHttpHeaders)  

加载制定url并携带http header数据。

————————————————————————————————————————————————————
public void reload ()  

重新加载页面  注意:页面所有资源会重新加载

————————————————————————————————————————————————————
public void stopLoading ()  

停止加载页面

 

(b). 网页的前进后退

public void goBack ()  // 页面后退public void goForward ()  // 页面前进 public void goBackOrForward (int steps) // 以当前的index为起始点前进或者后退到历史记录中指定的steps,  如果steps为负数则为后退,正数则为前进public boolean canGoForward ()  // 判断页面是否能够前进public boolean canGoBack ()  // 判断页面是否能够后退

 

(c). JavaScript操作

public void addJavascriptInterface (Object object, String name)  

当网页需要和App进行交互时,可以注入Java对象提供给JavaScritp调用.  Java对象提供相应的方法供js使用.

注意:在Android 4.2以下使用这个api会涉及到JavaScript安全问题, javascript可以通过反射这个Java对象的相关类进行攻击。

链接:Android WebView 总结 —— Java和JavaScript交互 

链接:Android 4.2版本以下使用WebView组件addJavascriptInterface方法存在JS漏洞

 

————————————————————————————————————————————————————
public void evaluateJavascript (String script, ValueCallback<String> resultCallback)  

这个方法在Android 4.4系统引入,因此只能在Android4.4系统中才能使用,提供在当前页面显示上下文中异步执行javascript代码

注意: 这个方法必须在UI线程调用,这个函数的回调也会在UI线程执行。那么在Android4.4一下如何执行javascrit代码呢?可以通过 WebView提供的loadUrl方法:具体格式如下:

webView.loadUrl("javascript:alert(injectedObject.toString())");  

其中javascript: 是执行javascript代码的标识 , 后面是javascript语句。

————————————————————————————————————————————————————
public void removeJavascriptInterface (String name)  

删除addJavascripInterface时对webview注入的java对象. 此方法在不同的Android系统WebView会有问题,会存在失效情况。

(d). 网页查找功能

public void findAllAsync (String find)  

异步执行查找网页内包含的字符并设置高亮,查找结果会回调.

————————————————————————————————————————————————————

public void findNext (boolean forward)  

查找下一个匹配的字符

 

(e). WebView 事件回调监听

public void setWebChromeClient (WebChromeClient client)  

主要通知客户端app加载当前网页的 title,Favicon,progress,javascript dialog等事件,通知客户端处理这些相应的事件。

————————————————————————————————————————————————————
public void setWebViewClient (WebViewClient client)  

主要通知客户端app加载当前网页时的各种时机状态,onPageStart,onPageFinish,onReceiveError等事件。

 

 

Android WebView 研发教程