【问题标题】:WebView loadDataWithBaseURL method cannot load imagesWebView loadDataWithBaseURL 方法无法加载图片
【发布时间】:2013-08-28 12:13:44
【问题描述】:

我有一个包含几个 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 中包含“..”,例如 &lt;img src="../images/face.jpg"&gt; 麻烦是父目录 (..) 部分被 webview 忽略

这个“..”对我来说很重要,我不知道为什么它会跳过那部分

编辑

我正在从 zip 文件加载图像,因此在 shouldInterceptRequest() 中我可以放置必要的逻辑,但首先我应该有正确的 src。

我还注意到,如果路径附加到 baseUrl,它们也会被忽略,例如

http://dummy.baseUrl/one/two/

变成(从请求日志中查看)

http://dummy.baseurl/

我怀疑这两者是否相关!

【问题讨论】:

    标签: android html


    【解决方案1】:

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

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

    【讨论】:

    • 我正在从 zip 输入流加载图像
    【解决方案2】:

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

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

    我将 baseUrl 更改为

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-19
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      相关资源
      最近更新 更多