热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WebView加载网页加载资源总结MD

Markdown版本笔记我的GitHub首页我的博客我的微信我的邮箱
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱
MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com

WebView 加载网页 加载资源 总结 MD


目录

目录
WebView 加载数据的几种方法
loadData
使用说明
加载中文注意事项
loadDataWithBaseURL
使用说明
baseUrl的用法解析
loadUrl
postUrl
evaluateJavascript
加载各种类型的资源方法总结
一个完整的案例
Java 代码
参考HTML代码

WebView 加载数据的几种方法

demo

loadData

使用 loadUrl 不但浪费流量,而且加载起来也慢,所以可以将页面提前写好放到项目中,这样就可以用 loadData 更快的加载页面,用户体验会好些。

void loadData(String data, String mimeType, String encoding)
  • String data : a String of data in the given encoding
  • String mimeType : the MIME type of the data, e.g. 'text/html'
  • String encoding : the encoding of the data

使用说明

Loads the given data into this WebView using a 'data' scheme URL.
使用 'data' 方案 URL 将给定的数据加载到此WebView中。

Note that Javascript's same origin policy means that script running in a page loaded using this method will be unable to access content loaded using any scheme other than 'data', including 'http(s)'.
请注意,Javascript的"同源策略"意味着,在使用此方法加载的页面中运行的脚本,将无法访问使用除了使用 data方案 之外的任何内容,包括http。


To avoid this restriction, use loadDataWithBaseURL() with an appropriate base URL.
为避免此限制,请使用带有适当的base URL的loadDataWithBaseURL()方法。

The encoding parameter specifies whether the data is base64 or URL encoded. If the data is base64 encoded, the value of the encoding parameter must be 'base64'.
encoding参数用于指定数据是否是采用base64编码或URL编码。如果数据为base64编码,则编码参数的值必须为'base64'。

For all other values of the parameter, including null, it is assumed that the data uses ASCII encoding for octets inside the range of safe URL characters and use the standard %xx hex encoding of URLs for octets outside that range.
对于此参数的其他所有可能值,包括null,假定数据在安全URL字符范围内使用八位字节的ASCII编码,并且,在此范围以外的字节使用标准的 %xx 十六进制编码的八位字节的URL。

For example, '#', '%', '\', '?' should be replaced by %23, %25, %27, %3f respectively.
例如, '#', '%', '\', '?'应分别由%23,%25,%27,%3f代替。


The 'data' scheme URL formed by this method uses the default US-ASCII charset.
由此方法形成的'data' 方案 URL使用默认的US-ASCII字符集。

If you need to set a different charset, you should form a 'data' scheme URL which explicitly specifies a charset parameter in the mediatype portion of the URL and call loadUrl(String) instead.
如果需要设置不同的字符集,则应该形成一个'data' 方案 URL,它 显式 地在URL的 mediatype 部分 指定 一个charset 参数,或者也可以通过调用loadUrl代替。

Note that the charset obtained from the mediatype portion of a data URL always overrides that specified in the HTML or XML document itself.
请注意,从数据URL的 mediatype部分 获取的字符集,总是覆盖HTML或XML文档本身指定的字符集。

加载中文注意事项

在使用 loadData 方法时,如果按照官网文档样式去写,当出现中文时中文部分会出现乱码,即使指定“utf-8”、“gbk”、“gb2312”也都一样。

String time = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss SSS", Locale.getDefault()).format(new Date());
String data = "你好:包青天 

请登录" + "

" + time;

错误方式一:

webview.loadData(data, "text/html", "UTF8");

如果baseUrl没有指定,那么这两张图片将显示不出来,因为这里两个图片的地址是相对路径,不指定baseUrl时根本找不到这两张图片。

loadUrl

void loadUrl(String url) Loads the given URL.
void loadUrl(String url, Map additionalHttpHeaders) Loads the given URL with the specified additional HTTP headers.

Map: the additional headers to be used in the HTTP request for this URL, specified as a map from name to value.
要在此URL的HTTP请求中使用的附加的headers,指定为从name到value的映射。

Note that if this map contains any of the headers that are set by default by this WebView, such as those controlling caching, accept types or the User-Agent, their values may be overridden by this WebView's defaults.
请注意,如果此映射包含此WebView默认设置的任何headers,例如控制缓存,可接受的类型,或User-Agent,那么这些设定的值可能会被该WebView的默认值所覆盖。

postUrl

void postUrl (String url, byte[] postData)

Loads the URL with postData using "POST" method into this WebView.
If url is not a network URL, it will be loaded with loadUrl(String) instead, ignoring the postData param.

String url = "http://tapi.95xiu.com/app/pay/weixinmiao/user_pay.php" ;
String postData= "uid=" + uid + "&session_id=" + session_id + "&total_fee="+total_fee;
webview.postUrl(url , EncodingUtils.getBytes(postData, "base64"));

evaluateJavascript

void evaluateJavascript (String script, ValueCallback resultCallback)

Asynchronously evaluates Javascript in the context of the currently displayed page. If non-null, |resultCallback| will be invoked with any result returned from that execution. This method must be called on the UI thread and the callback will be made on the UI thread.
在当前显示页面的上下文中异步执行Javascript。 如果非空,| resultCallback | 将使用从该执行返回的任何结果来调用它。 必须在UI线程上调用此方法,并在UI线程上进行回调。

加载各种类型的资源方法总结

加载assets下的资源

webView.loadUrl("file:///android_asset/" + "h5/test.html");

String data = "包青天

" + "

" + time; webView.loadDataWithBaseURL("file:///android_asset/", data, "text/html", "utf-8", null);

加载 res/drawable 或 res/mipmap 或 res/raw 下的资源

webView.loadUrl("file:///android_res/" + "drawable/ic_launcher");
webView.loadUrl("file:///android_res/" + "mipmap/ic_launcher");
webView.loadUrl("file:///android_res/" + "raw/test");

data = "包青天

" + "

" + time; webView.loadDataWithBaseURL("file:///android_res/", data, "text/html", "utf-8", null);

加载SD卡中的资源

String FILE_BASE_SIMPLE = "file://" + Environment.getExternalStorageDirectory().getAbsolutePath()+ "/";//【file:///sdcard/】
webView.loadUrl(FILE_BASE_SIMPLE + "test.html");//【file:///storage/emulated/0/test.html】或【file:///sdcard/test.html】

data = "包青天

" + "

" + time; webView.loadDataWithBaseURL(FILE_BASE_SIMPLE, data, "text/html", "utf-8", null);

一个完整的案例

演示load不同资源的方法

Java 代码

public class LoadUrl_DataActivity extends ListActivity {
    private WebView webView;
    private boolean b;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String[] array = {"0、loadData时中文乱码问题,错误解决方案",
                "1、loadData时中文乱码问题,正确解决方案",
                "2、演示loadDataWithBaseURL方法中,参数baseUrl的作用",
                "3、加载assets下的资源",
                "4、加载res/drawable下的资源",
                "5、加载res/raw下的资源",
                "6、加载SD卡中的资源",
                "7、加载网页http资源",};
        setListAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, new ArrayList<>(Arrays.asList(array))));
        webView = new WebView(this);
        getListView().addFooterView(webView);
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        String time = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss SSS", Locale.getDefault()).format(new Date());
        String data = "包青天

百度" + "

" + time; b = !b; Toast.makeText(this, "" + b, Toast.LENGTH_SHORT).show(); switch (position) { case 0://loadData时中文乱码问题,错误解决方案 String encoding = b ? "UTF8" : "base64";//encoding参数的值,设置为null或其他任何值(除了"base64")都是没有影响的 webView.loadData(data, "text/html", encoding);//如果不是采用的base64编码,那么绝对不可以设置为base64 break; case 1://loadData时中文乱码问题,正确解决方案 if (b) webView.loadData(data, "text/html; charset=UTF-8", "encoding可以是base64之外的任何内容"); else webView.loadDataWithBaseURL(null, data, "text/html", "utf-8", null); break; case 2://演示loadDataWithBaseURL方法中,参数baseUrl的作用 String baseUrl = b ? null : "http://img.mmjpg.com";//不设置baseUrl时,data2里面的两张图片将显示不出来 String data2 = "这里两个图片的地址是相对路径

"; webView.loadDataWithBaseURL(baseUrl, data2, "text/html", "utf-8", null); break; case 3://加载assets下的资源 data = "包青天

" + "

" + time; if (b) webView.loadUrl(URLUtils.ASSET_BASE + "h5/test.html"); else webView.loadDataWithBaseURL(URLUtils.ASSET_BASE, data, "text/html", "utf-8", null); break; case 4://加载res/drawable 或 res/mipmap下的资源。不会区分drawable与drawable-***,但会区分drawable和mipmap data = "包青天

" + "

" + time; if (b) webView.loadUrl(URLUtils.RESOURCE_BASE + "mipmap/ic_launcher");//建议直接省略文件后缀名 else webView.loadDataWithBaseURL(URLUtils.RESOURCE_BASE, data, "text/html", "utf-8", null); break; case 5://加载res/raw下的资源,和res/drawable一样,都属于Resources资源文件 data = "包青天

" + "

" + time; if (b) webView.loadUrl(URLUtils.RESOURCE_BASE + "raw/test"); else webView.loadDataWithBaseURL(URLUtils.RESOURCE_BASE, data, "text/html", "utf-8", null); break; case 6://加载SD卡中的资源。注意,如果提示【net::ERR_ACCESS_DENIED】,是因为没有申请权限 data = "包青天

" + "

" + time; if (b) webView.loadUrl(URLUtils.FILE_BASE_SIMPLE + "test.html"); else webView.loadDataWithBaseURL(URLUtils.FILE_BASE_SIMPLE, data, "text/html", "utf-8", null); break; case 7://加载网页http资源 webView.loadUrl(b ? "http://www.meituba.com/" : "http://img.mmjpg.com/2017/936/5.jpg"); break; } } }

参考HTML代码




    
    
    
    


加载资源

res下的图片 src='file:///android_res/drawable/ic_launcher'

assets下的图片 src='file:///android_asset/icon.jpg'

SD卡下的图片 src='file:///sdcard/icon.png'

电话  短信  邮件

2017-7-27


推荐阅读
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 使用jqTransform插件美化表单
    jqTransform 是由 DFC Engineering 开发的一款 jQuery 插件,专用于美化表单元素,操作简便,能够美化包括输入框、单选按钮、多行文本域、下拉选择框和复选框在内的所有表单元素。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • wxParse 0.3:微信小程序中的高级 HTML 和 Markdown 富文本解析器,全面支持多级嵌套与 Emoji 表情
    wxParse 0.3 是一款专为微信小程序设计的高级富文本解析器,支持 HTML 和 Markdown 转换为 WXML 可视化格式。该组件不仅能够处理复杂的多级嵌套结构,还全面支持 Emoji 表情,极大地提升了内容展示的多样性和用户体验。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 本文深入探讨了层叠样式表(CSS)的核心原理与应用技巧,旨在帮助读者全面理解CSS的工作机制。从选择器、属性到布局模式,文章详细解析了CSS的关键概念,并通过实例展示了如何高效运用这些技术,提升网页设计与开发的水平。 ... [详细]
author-avatar
单纯只是一2502904797
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有