android webview 加载本地,webview加载本地资源的各种尝试

1.webview 打开sd卡上的静态html文件 ,js文件既然放在assets文件夹下能找到,那能通过放在sd卡,能加载吗?

bVTk0k?w=926&h=143

答:事实证明,是没有用的。

2.既然能拿到html的数据,那我们是不是重写html的script的tag的src属性呢,前缀由我们动态地添加,是不是可以做到呢?

答:设定html中的js的路径为:这样在Android中,可以取得这个 script标签,然后修改src的值:

private String updateTags(String html) {

Document doc = Jsoup.parse(html, "UTF-8");

Elements eles = doc.getElementsByTag("script");

for (Element e : eles) {

e.attr("src","file:///android_asset"+e.attr("src"));

}

return doc.toString();

}

修改如上代码: bundle.putString("html",html);-->bundle.putString("html",updateTags(html) );

亲测,这个是可以用的。但是在加载html的时候,需要用data的方式的进行加载。这样,我们在html中,然后拿到script标签,修改src的值,各自拿到自己路径的js文件,这样就可以达到用网络的html但是用本地的js进行加载了。但是很明显这样的话,如果我们有多个script标签,有些需要增加前缀,有些不要,那这样的话,就需要设定一定的匹配规则了。

3.我们能不能通过执行js脚本,达到将js文件注入到html文件当中去,然后再由浏览器进行解释执行呢?

private void injectScriptFile(WebView view, String scriptFile) {

InputStream input;

try {

input = getAssets().open(scriptFile);

byte[] buffer = new byte[input.available()];

input.read(buffer);

input.close();

String js = new String(buffer);

view.loadUrl("javascript:" + js);

} catch (IOException e) {

e.printStackTrace();

}

}

});

if(mUrl.contains("isjs=1")) {

injectScriptFile(mWebview, "zepto_1.1.3.js");

}

mWebview.loadUrl(mUrl);

在加载url的html页面之前,可以执行js的注入。

4.细看webview的api,我们会发现,Android系统有提供给我们对应的api进行资源拦截,

webView.setWebViewClient(new WebViewClient() {

/**

*

* @return 本地jquery

*/

private WebResourceResponse editResponse() {

try {

return new WebResourceResponse("application/x-javascript", "utf-8", getAssets().open("webview.js"));

} catch (IOException e) {

e.printStackTrace();

}

//需处理特殊情况

return null;

}

@Override

public WebResourceResponse shouldInterceptRequest(WebView view, String url) {

Log.d(TAG, "shouldInterceptRequest: " + url);

if (Build.VERSION.SDK_INT < 21) {

return editResponse();

}

return super.shouldInterceptRequest(view, url);

}

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)

@Override

public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {

if (Build.VERSION.SDK_INT >= 21) {

String url = request.getUrl().toString();

if (!TextUtils.isEmpty(url)) {

return editResponse();

}

}

return super.shouldInterceptRequest(view, request);

}

});

这种能对资源文件进行本地的替换,以节省需要下载的流量,提升webview浏览的性能,这种方案对图片的替换也能很好的处理。

总结:基于上面第四种方案,我们就可以制定下发策略,本地更新策略,缓存策略,将资源存放本地,达到webview加载资源(图片,js,css等)可以先从本地获取,没有再从网络获取,并缓存到本地,提高在app中浏览网页的速度和用户体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 遍历sdcard,Android编程读取Assets所有文件(遍历每一个文件夹)并存入sdcard的方法...

本文实例讲述了Android编程读取Assets所有文件(遍历每一个文件夹)并存入sdcard的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;private void CopyAssets(String assetDir, String dir) {String[] files;try {// 获得Assets一共有几多文件files this.getResourc…

apple手表android手机,Apple Watch 4发布了,安卓手机用户如何选择呢?

Apple Watch 4发布了&#xff0c;安卓手机用户如何选择呢&#xff1f;2018年09月13日 17:40作者&#xff1a;黄页编辑&#xff1a;黄页分享一年一度的“科技界春晚”苹果新品发布在今天凌晨举行。苹果带来了新一代的智能手表——Apple Watch Series 4系列。作为“课代表”,科技…

android投屏到电视机,华为手机如何投屏到电视机上?按步骤,1分钟搞定手机投屏电视机...

现在&#xff0c;越来越多的人开始用上了华为手机&#xff0c;几乎人手一台。在平时学习、工作中&#xff0c;我也经常使用华为手机来处理、完成很多事项、任务&#xff0c;例如把手机投屏到电视机上。除了满足学习、工作需求&#xff0c;我也经常把手机投屏电视来看视频、玩游…

html语言可以干什么,JavaScript语言能做什么?

JavaScript是除了HTML和CSS之外&#xff0c;万维网的核心技术之一。JavaScript支持交互式web页面&#xff0c;是web应用程序的重要组成部分。绝大多数网站都使用它&#xff0c;主要的网络浏览器都有专门的JavaScript引擎来执行它。JavaScript(简称“JS”) 是一种具有函数优先的…

html获取当前二级域名,列举某域名下所有二级域名的方法总结

鬼仔注&#xff1a;本文为总结文&#xff0c;转载请注明来源( http://huaidan.org )这里介绍三种列举某域名下所有二级域名的方法&#xff0c;有知道其他方法的请到 http://huaidan.org/archives/1088.html 留言进行补充~谢谢。1、命令行下列举此方法好像是hoky很久以前写的&am…

html 文本溢出,确定HTML元素的内容是否溢出

通常情况下&#xff0c;你可以比较client[Height|Width]使用scroll[Height|Width]&#xff0c;以检测这种...但值是相同的&#xff0c;当溢出是可见的。因此&#xff0c;检测例程必须考虑到这一点&#xff1a;// Determines if the passed element is overflowing its bounds,/…

html调用父页面的函数,javascript – 如何从子窗口jquery调用父窗口函数?

我只需要在用户关注子窗口时调用父窗口中的函数.我在父窗口中有这个代码,function CallParent(){alert(" Parent window Alert");}Click here to open the child window和贝娄代码在我的孩子的窗口,jQuery(document).ready(function(){window.opener.CallParent();})…

html5绘制矩形动画,HTML5下绘制矩形教程

绘制矩形上一节&#xff0c;我们使用lineto()方法绘制一个封闭的矩形。其实&#xff0c;canvas的api提供了rect()方法可以绘制矩形。rect()方法是路径方法&#xff0c;它会把指定的矩形添加到当前路径的子路径中。它只添加路径&#xff0c;绘制图形还是由stroke()或fill()方法完…

html免费天气预报代码,免费自我定制天气预报代码

免费自我定制天气预报代码(2010-06-15 22:03:35)标签&#xff1a;昔阳天气预报一乌海天气预报一杂谈今晚蚊子又发现一个天气预报,在别人博客上看见的,昔阳天气预报一周,觉得还不错,查看了一下源代码,把怎么弄的方法告诉大家,南靖天气预报一周,其实没什么技术含量,很简单的,就是…

html5伪类触发机制,HTML5表单验证

validity属性表单元素对象具有此属性&#xff0c;返回值是一个ValidityState对象。ValidityState对象的名称是合成词&#xff0c;如有两个单词构成&#xff1a;(1).validity&#xff1a;翻译成汉语具有"验证"的意思。(2).state&#xff1a;翻译成汉语具有"状态&…

计算机管理中看不到本地用户,win7系统计算机管理中没有本地用户和组的解决方法...

很多小伙伴都遇到过win7系统计算机管理中没有本地用户和组的困惑吧&#xff0c;一些朋友看过网上零散的win7系统计算机管理中没有本地用户和组的处理方法&#xff0c;并没有完完全全明白win7系统计算机管理中没有本地用户和组是如何解决的&#xff0c;今天小编准备了简单的解决…

html编程入门指南,给萌新HTML5 入门指南

本文由葡萄城技术团队原创并首发转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。HTML5的发展改变了互联网技术趋势&#xff0c;前端热度依旧不减&#xff0c;所以对于应用开发人员前端技术也成了必…

税务大厅计算机网络安全与管理,峡江县税务局多措并举加强网络安全和保密管理...

在2019年国家网络安全宣传周期间&#xff0c;峡江县税务局紧紧围绕“网络安全为人民&#xff0c;网络安全靠人民”主题扎实开展网络安全宣传活动&#xff0c;多点着力&#xff0c;多措并举&#xff0c;编织网络安全保障网&#xff0c;加强保密教育管理&#xff0c;确保信息网络…

计算机知识太多了,计算机基础知识对程序员来说有多重要?

原标题&#xff1a;计算机基础知识对程序员来说有多重要&#xff1f;科班和培训生同比于自学者的优势就在于这些计算机专业的核心课程(数据结构与算法这种不管科班培训都要学的不算)&#xff1a;离散数学、编译原理、计算机组成原理、操作与系统——乃至图形学和数字图像处理。…

利用计算机录音模拟声波,2016年计算机一级考试题库及答案

2016年计算机一级考试题库及答案62.对于声音的描述&#xff0c;以下正确的是_____C_____。A.声音是一种与时间有关的离散波形B.利用计算机录音时&#xff0c;首先对模拟声波进行量化C.利用计算机录音时&#xff0c;首先对模拟声波进行采样D.数字声音的存储空间大小只与采样频率…

未来如何与计算机和谐相处,未来计算机将进入身体和大脑,大脑将和云连接

文/张铎“机器人在2029年能够达到人类的水平”张铎(以下简称张)&#xff1a;在今年的CES大展上&#xff0c;我们看到了能从手掌上起飞的自拍无人机&#xff0c;电视的分辨率都出到了8K的清晰度&#xff0c;像在去年的CES上还是4K的&#xff0c;发展非常迅速&#xff0c;然后今年…

html未点击背景 点击背景,在AngularJs中点击状态如何改变背景色

下面我就为大家分享一篇AngularJs点击状态值改变背景色的实例&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助。实例如下&#xff1a;//更改边框颜色的代码 $("#shname").css({"border":"1px solid red"});//排序有时候下标会错乱…

计算机应用考试其一级属于中级,计算机软件水平考试可以直接考中级吗?

原标题&#xff1a;计算机软件水平考试可以直接考中级吗&#xff1f;【http://jsj.kaoshib.com/rjsp/bkzn/76322.html】计算机软件水平考试呢&#xff0c;是对计算机与软件专业技术人员的一个职业资格、专业资格认定的一种考试&#xff0c;在某种程度上&#xff0c;计算机软件水…

html5画布太极图,canvas实现太极图

window.onload function() {var cv document.getElementById(cv);var cxt cv.getContext(2d); //获取画布//画白 大半圆cxt.beginPath();cxt.arc(150, 150, 150, -Math.PI * 0.5, -Math.PI * 1.5, true);cxt.closePath();cxt.fillStyle #FFFFFF;cxt.lineWidth 1;cxt.fill(…

bmi计算器HTML,身高180cm体重110.5kg的男性标准体重与BMI指数 - BMI计算器

当您看到你目前的体脂率后是否会有种恐惧感&#xff1f;因为你已经步入肥胖人士的队列&#xff0c;你能胖成这样&#xff0c;小M也是无话可说了……当然&#xff0c;肥胖不可怕&#xff0c;可怕的是你已经减肥的决心&#xff01;以您目前的体脂率来看&#xff0c;您有可能是身体…