Android Webview总结_html/css_WEB-ITnose
这些都是曾经收集到的一些关于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!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

本文讨论了html&lt; datalist&gt;元素,通过提供自动完整建议,改善用户体验并减少错误来增强表格。Character计数:159

本文讨论了HTML&lt; Progress&gt;元素,其目的,样式和与&lt; meter&gt;元素。主要重点是使用&lt; progress&gt;为了完成任务和LT;仪表&gt;对于stati

本文讨论了HTML&lt; meter&gt;元素,用于在一个范围内显示标量或分数值及其在Web开发中的常见应用。它区分了&lt; meter&gt;从&lt; progress&gt;和前

本文讨论了&lt; iframe&gt;将外部内容嵌入网页,其常见用途,安全风险以及诸如对象标签和API等替代方案的目的。

本文讨论了视口元标签,这对于移动设备上的响应式Web设计至关重要。它解释了如何正确使用确保最佳的内容缩放和用户交互,而滥用可能会导致设计和可访问性问题。

本文讨论了使用HTML5表单验证属性,例如必需的,图案,最小,最大和长度限制,以直接在浏览器中验证用户输入。

本文解释了HTML5&lt; time&gt;语义日期/时间表示的元素。 它强调了DateTime属性对机器可读性(ISO 8601格式)的重要性,并在人类可读文本旁边,增强Accessibilit
