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,一经查实,立即删除!

相关文章

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…

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;离散数学、编译原理、计算机组成原理、操作与系统——乃至图形学和数字图像处理。…

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;计算机软件水…

计算机网络中ping命令的使用方法,ping命令的基础使用技巧

在电脑基础操作中&#xff0c;很多人在操作电脑中可以接触到这个ping命令。但是都是没有深入的去了解这个ping命令。对于ping命令在电脑中可以通过ping来判断及解决网络故障。我们每天都接触电脑使用互联网的人来说也是要去了解ping命令的基础使用。ping命令的工作原理&#xf…

计算机上硬盘显示不出来怎么办,加装硬盘不显示怎么办_新硬盘装上去了但是没显示这么解决...

一些小伙伴在加装玩新的硬盘后出现了一个问题&#xff0c;那就是硬盘明明安装上去了&#xff0c;但是电脑上没有显示出来。这是为什么呢&#xff1f;其实可能是因为安装没成功或者分区没有分好导致的&#xff0c;那么加装硬盘不显示该怎么办呢&#xff1f;接下来小编就给大家带…

武未转变服务器tp,未转变者怎么tp别人 | 手游网游页游攻略大全

发布时间&#xff1a;2016-04-24&#xfeff;&#xfeff;&#xfeff;&#xfeff;&#xfeff; 我的世界中有的玩家想要TP别人,但是不知道怎么操作,有的新手玩家更是不知道TP是什么意思,那么这些就让小编来为大家解释一遍吧. 新手玩家请看我的世界手机版tp拉人怎么操作 TP操作…

搜狗语音输入提示服务器繁忙,讯飞语音输入如何提高识别率 提高方法

讯飞语音是一款语音输入软件&#xff0c;能够帮助用户进行通过语音说话&#xff0c;进行智能识别&#xff0c;帮助用户在繁忙的时候&#xff0c;直接语音输入&#xff0c;不过语言描述要清晰哦&#xff01;小编在这里分享一下识别率提高方法&#xff0c;不要错过哦&#xff01;…

服务器ie打不开http协议,在浏览器输入地址后,这个世界发生了什么(http协议浅谈)...

引言这篇文章是我各处收集有关于http的知识&#xff0c;不成体系&#xff0c;爱看不看?&#xff0c;看完点赞。我们输入网址之后发生的事情输入网址并回车(URL 包括 协议名称 域名或者IP 端口号 请求资源具体地址 参数)解析域名 DNS解析浏览器发送HTTP请求服务器处理请求服务器…

个性化显示服务器,Linux系统个性化登录提示信息的方法

字符界面操作久了&#xff0c;就没有太多的新鲜感&#xff0c;所以加点登录时的个性化显示&#xff0c;让心情变的更愉快&#xff01;如果采用root账号登录编辑/etc/bashrc内容&#xff0c;那所有其他帐号登录都会提示相同的内容&#xff0c;如果想每个用户进行配置&#xff0c…

微软2022服务器,​微软公开地分享了即将发布的WindowsServer 2022的特性

微软测试其自去年以来的下一个版本的WindowsServer在内部测试程序中。尽管发布了常规的服务器测试构建&#xff0c;但Microsoft官员很少提供有关这些服务器测试构建中的特性和更新的任何公开信息。但是&#xff0c;在3月2日&#xff0c;官员们更公开地分享了即将发布的WindowsS…