求助:android webview加载网页,对网页中资源(如图片、css等)重定向问题 先用get方式获取网页数据,从网页数据里面找出对应的图片、swf的路径,将这些路径替换成你本地的文件路径,并将这个替换好的内容保存到本地网页文件,然后再让webView加载这个本地的网页文件。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 缓存涉及到的东西太多了,完全看不明白,当时想的是看懂这个机制,然后重写webview,但是一看下来,发现涉及到的类远不止webview这么简单,webview加载网页,是很多类、模块协同操作的,单单重写webview根本无事于补,感觉只能将webview加载页面这一块完全重写……就算花几个月弄明白了缓存机制,也没法把它用到项目中来,因为我做的是应用不是系统定制,就算修改了源码,也影响不到用户的机器……纠结啊 谢谢,这个方法已经试过,然后排除了,因为涉及到的问题很多,这样做的话甚至比改服务器页面更复杂:1、如何筛选页面的图片标签,是个大问题,要将网页存下来慢慢判断,还不如直接修改页面,相信那样工作量要小得多(可能android有筛选机制,但页面设计时没考虑会遇到这个问题,所以页面设计很混乱,比如很多标签写在一行,这也增大了筛选的难度)2、就算第一个问题解决了,但项目中,并不是所有的图片都要放在本地,如何判断要替换哪些图片又是问题这两个是最大的问题,还有很多小问题、细节等……所以,现在只能想办法不去动页面(不论是服务器还是将页面保存再改),同时实现这个功能 可以把要求替换的图片url和要替换的图片地址保存到数据库,以后在html中数据直接查数据库,得到要替换的图片地址,如果没有查询到就直接用html里的url. 在用替换查找时,还可以有第三方包比较容易找,jsoup.jar 现在回答这个两年前的问题,目前根据Android版本分布,如果可以忽略掉3.0以下这部分功能的支持,可以使用shouldInterceptRequest。WebView webView = new WebView(this);webView.setWebViewClient(new WebViewClient() { @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { Log.i(LOGTAG, "shouldInterceptRequest url=" + url + ";threadInfo" + Thread.currentThread()); WebResourceResponse response = null; if (url.contains("logo")) { try { InputStream localCopy = getAssets().open("droidyue.png"); response = new WebResourceResponse("image/png", "UTF-8", localCopy); } catch (IOException e) { e.printStackTrace(); } } return response; } });setContentView(webView);webView.loadUrl("http://m.sogou.com");具体可以参考这篇文章http://droidyue.com/blog/2014/11/23/block-web-resource-in-webview/ 如何使用自己的写的播放器 播放webview 中视频和音乐? Gallery3D相册居左 刚进界面时,让其刷新一回的问题,在线等 新手求教,关于多选dialog 多选项限定 谁知道修改development下的文件应该编译哪个模块? android 2.2目录在中的那些*.class 怎么都无法查看? android下C函数调用arm汇编函数的问题 请问现在哪个发布平台有下载收费的功能? 线等....最近做XMPP-openfire ps遮罩效果怎么实现在android里实现 如何在代码中设置imageview的位置。 求个安卓毕业设计的题目或者灵感,很急
1、如何筛选页面的图片标签,是个大问题,要将网页存下来慢慢判断,还不如直接修改页面,相信那样工作量要小得多(可能android有筛选机制,但页面设计时没考虑会遇到这个问题,所以页面设计很混乱,比如很多标签写在一行,这也增大了筛选的难度)2、就算第一个问题解决了,但项目中,并不是所有的图片都要放在本地,如何判断要替换哪些图片又是问题这两个是最大的问题,还有很多小问题、细节等……所以,现在只能想办法不去动页面(不论是服务器还是将页面保存再改),同时实现这个功能
webView.setWebViewClient(new WebViewClient() { @Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
Log.i(LOGTAG, "shouldInterceptRequest url=" + url + ";threadInfo" + Thread.currentThread());
WebResourceResponse response = null;
if (url.contains("logo")) {
try {
InputStream localCopy = getAssets().open("droidyue.png");
response = new WebResourceResponse("image/png", "UTF-8", localCopy);
} catch (IOException e) {
e.printStackTrace();
}
}
return response;
}
});
setContentView(webView);
webView.loadUrl("http://m.sogou.com");
具体可以参考这篇文章http://droidyue.com/blog/2014/11/23/block-web-resource-in-webview/