WebView loadDataWithBaseURL方法无法加载图像

时间:2013-08-28 12:13:44

标签: android html

我有一个包含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/

我怀疑这两者是否相关!

2 个答案:

答案 0 :(得分:0)

您想从哪里加载图片?如果您尝试从手机加载它们,则需要使用资源文件夹。

https://stackoverflow.com/a/7268695/642161

答案 1 :(得分:0)

我使用黑客解决了我的问题,不确定是否存在更好的解决方案!

看起来baseUrl和src被合并以创建最终请求URL,因此如果src中存在任何“..”,它将用于重新计算最终URL,无论顶级目录是否存在,它们都会消失。

我将baseUrl更改为

file:///android_asset/x123_/x123_/x123_/x123_/

这里“x123_”是可以采用的任何随机字符序列,但应该最不可能出现在“src”中

现在在shouldInterceptRequest()中的请求url中计算“x123_”的数量,如果它是4(如本例所示)src中没有“..”,否则数字为“..”= 4 - count