我有一个包含seveal img标签的html字符串,我将其传递给webview的 loadDataWithBaseURL 方法,如
String data = "some html with <img> and <link>.....";
wview.loadDataWithBaseURL("http://dummy.baseurl/", data, "text/html", "UTF-8", null);
如果我没有传递第一个参数,可以显示html,但是后续的请求或css文件没有被触发,这就是我传递虚拟baseUrl的原因。
当我尝试查看在 shouldInterceptRequest ()下面发出的请求时运行代码
wview.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view,
String url) {
Log.d("url="+url, "resources");
....
}
});
我可以看到像
这样的输出http://dummy.host.name/images/face.jpg 等
但我的原始html在img src中包含“..”,如<img src="../images/face.jpg">
,麻烦是父目录(..)部分被webview忽略
这个“..”对我来说很重要我无法弄清楚为什么它会跳过那部分
修改
我正在从一个zip文件加载图像,所以在shouldInterceptRequest()里面我可以放置必要的逻辑,但首先我应该有正确的src。
我还注意到,如果将路径附加到baseUrl,它们也会被忽略,例如
http://dummy.baseUrl/one/two/
变为(从请求日志中查看)
http://dummy.baseurl/
我怀疑这两者是否相关!
答案 0 :(得分:0)
您想从哪里加载图片?如果您尝试从手机加载它们,则需要使用资源文件夹。
答案 1 :(得分:0)
我使用黑客解决了我的问题,不确定是否存在更好的解决方案!
看起来baseUrl和src被合并以创建最终请求URL,因此如果src中存在任何“..”,它将用于重新计算最终URL,无论顶级目录是否存在,它们都会消失。
我将baseUrl更改为
file:///android_asset/x123_/x123_/x123_/x123_/
这里“x123_”是可以采用的任何随机字符序列,但应该最不可能出现在“src”中
现在在shouldInterceptRequest()中的请求url中计算“x123_”的数量,如果它是4(如本例所示)src中没有“..”,否则数字为“..”= 4 - count