这些都是曾经收集到的一些关于Webview的知识,有些工作中用到了,有些暂时还没有用到,这次统一整理下,希望对自己,对大家有所帮助。另外,欢迎大家补充(当然,有错也要指正呀,不胜感激),如果可以的话,我会 更新到本帖中。
官方文档 更多知识:)
一.权限
二.创建Webview对象
WebView webview = new WebView(this);
三.加载网页的方式
- loadData(String data, String mimeType, String encoding)des:Load the given data into the WebView.as:
String summary = "<html><body>You scored <b>192</b> points.</body></html>"; webview.loadData(summary, "text/html", null);
- loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)des:Load the given data into the WebView, use the provided URL as the base URL for the content.
- loadUrl(String url)des:Load the given url.as: webView.loadUrl("http://www.jianshu.com/"); //加载网络网页webView.loadUrl("file:///android_asset/html/index.html"); //加载本地assert目录下网页webView.loadUrl("content://com.Android.htmlfileprovider/sdcard/kris.html"); // 加载SD卡html
- loadUrl(String url, Map
extraHeaders)Load the given url with the extra headers. - postUrl(String url, byte[] postData)des: Loads the URL with postData using "POST" method into this WebView.
- 利用Intent调用系统浏览器
Uri uri = Uri.parse("http://www.jianshu.com/"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);
四.设置Webview
webView.clearHistory();webView.clearCache(true);webView.clearFormData();webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);// 隐藏滚动条webView.requestFocus();webView.requestFocusFromTouch();
五.Webview辅助类
1>WebSettings设置WebView的一些属性、状态等,例如允许使用javascript,允许使用缓存,允许使用内置的缩放组件,设置支持IS等。
- 官方文档
- 获取WebSettings对象:WebSettings mWebSettings = webView.getSettings();
- For Example
WebSettings mWebSettings = webView.getSettings();mWebSettings.setJavaScriptEnabled(true);// 支持JSmWebSettings.setJavaScriptCanOpenWindowsAutomatically(true);//支持通过js打开新的窗口mWebSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);//提高渲染等级mWebSettings.setBuiltInZoomControls(false);// 设置支持缩放mWebSettings.setDomStorageEnabled(true);//使用localStorage则必须打开mWebSettings.setBlockNetworkImage(true);// 首先阻塞图片,让图片不显示mWebSettings.setBlockNetworkImage(false);// 页面加载好以后,在放开图片:mWebSettings.setSupportMultipleWindows(false);// 设置同一个界面mWebSettings.setBlockNetworkImage(false);mWebSettings.setCacheMode(1);mWebSettings.setNeedInitialFocus(false);// 禁止webview上面控件获取焦点(黄色边框)
主要帮助WebView处理各种通知、请求事件(例如,点击链接时候如何显示界面,页面开始加载,加载完毕之后有何动作等)
- 官方文档
- 使用
webView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { //页面开始加载时 super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { //页面加载结束时 super.onPageFinished(view, url); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); // 这里进行无网络或错误处理,具体可以根据errorCode的值进行判断, } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); /** * 网页跳转: * 1.在当前的webview跳转到新连接 * view.loadUrl(url); * 2.调用系统浏览器跳转到新网页 * Intent i = new Intent(Intent.ACTION_VIEW); * i.setData(Uri.parse(url)); * startActivity(i); */ return true; }});
辅助WebView处理Javascript的对话框、网站图标、网站Title、加载进度等
webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { // 获得网页的加载进度 newProgress为当前加载百分比 super.onProgressChanged(view, newProgress); } @Override public void onReceivedTitle(WebView view, String title) { // 获取网页的title,客户端可以在这里动态修改页面的title // 另外,当加载错误时title为“找不到该网页” super.onReceivedTitle(view, title); }});
六.与JS交互addJavascriptInterface
- 前提
mWebView.getSettings().setJavaScriptEnabled(true);
-
使用
mWebView.addJavascriptInterface(new JSInterface(), "jsInterface"); JSInterface对象:public class JSInterface { @JavascriptInterface public void methodA() { } @JavascriptInterface public void methodB(String webMessage) { }}
注意:1.JavascriptInterface是4.2版本google新增的一个注解,为了避免一个安全隐患,详细信息及4.2以下系统版本适配看这里: Android WebView的Js对象注入漏洞解决方案 ;另外,safe-java-js-webview-bridge这个开源项目完全用onJsPrompt() 替代了addJavaScriptInterface(),有兴趣的可以学习。2.JS调用Java:
window.js_callback.viewPicOnJavascript($('article img').index(this));
3.客户端调用JS
mWebView.loadUrl("javascript:alert()");
七.键盘
- webview是否可以返回到上一页面 webView.canGoBack()
- webview返回到上一页面 webView.goBack();
- webview是否可以前进 webView.canGoForward()
- webview前进 webView.goForward();*
public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event);}
八.其他
- WebViewClient好吧,之前确实不知道有这么个东东,今天写这篇贴子的时候才发现的,看名字,应该是在Fragment里对Webview的封装,应该是个好东西。有兴趣的小伙伴们 点进来:WebViewClient
- WebView cookies清理
CookieSyncManager.createInstance(this);CookieSyncManager.getInstance().startSync();CookieManager.getInstance().removeSessionCookie();
- 屏蔽长按事件
webView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { return true; }});
- Webiew保留缩放功能但是隐藏缩放控件(这是一招必杀技)
webView.getSettings().setSupportZoom(true);webView.getSettings().setBuiltInZoomControls(true);webView.getSettings().setDisplayZoomControls(false);// setDisplayZoomControls是在Android 3.0中新增的API.,调用此方法前需要对系统版本进行判断
- 判断Webview是否滑动到顶部或底部
if (webView.getContentHeight() * webView.getScale() == (webView.getHeight() + webView.getScrollY())) { // 处于底端}if(webView.getScrollY() == 0){ //处于顶部}des:getScrollY() //方法返回的是当前可见区域的顶端距整个页面顶端的距离,也就是当前内容滚动的距离.getHeight()或者getBottom() //方法都返回当前WebView这个容器的高度getContentHeight()返回的是整个html的高度,但并不等同于当前整个页面的高度,因为WebView有缩放功能,所以当前整个页面的高度实际上应该是原始html的高度再乘上缩放比例
================================================
更多内容请关注 我的专题 转载请注明 出处: http://www.jianshu.com/users/c1b4a5542220/latest_articles
Thank you and have a nice weekend!

本文討論了HTML&lt; Progress&gt;元素,其目的,樣式和與&lt; meter&gt;元素。主要重點是使用&lt; progress&gt;為了完成任務和LT;儀表&gt;對於stati

本文討論了html&lt; datalist&gt;元素,通過提供自動完整建議,改善用戶體驗並減少錯誤來增強表格。Character計數:159

本文討論了HTML&lt; meter&gt;元素,用於在一個範圍內顯示標量或分數值及其在Web開發中的常見應用。它區分了&lt; meter&gt;從&lt; progress&gt;和前

本文討論了視口元標籤,這對於移動設備上的響應式Web設計至關重要。它解釋瞭如何正確使用確保最佳的內容縮放和用戶交互,而濫用可能會導致設計和可訪問性問題。

本文解釋了HTML5&lt; time&gt;語義日期/時間表示的元素。 它強調了DateTime屬性對機器可讀性(ISO 8601格式)的重要性,並在人類可讀文本旁邊,增強Accessibilit

本文討論了使用HTML5表單驗證屬性,例如必需的,圖案,最小,最大和長度限制,以直接在瀏覽器中驗證用戶輸入。

本文討論了&lt; iframe&gt;將外部內容嵌入網頁,其常見用途,安全風險以及諸如對象標籤和API等替代方案的目的。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版
視覺化網頁開發工具