1

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

我怀疑这两个是否相关!

4

2 回答 2

0

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

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

于 2013-08-28T12:34:29.927 回答
0

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

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

我将 baseUrl 更改为

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

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

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

于 2013-08-29T03:10:58.547 回答