WebView,将本地 .CSS 文件添加到 HTML 页面?

Posted

技术标签:

【中文标题】WebView,将本地 .CSS 文件添加到 HTML 页面?【英文标题】:WebView, add local .CSS file to an HTML page? 【发布时间】:2011-09-28 14:56:31 【问题描述】:

android 中,我使用 WebView 显示我使用 Apache 的 HttpClient 从 Internet 获取的网页的一部分。为了只从 html 中获得我想要的部分,我使用 Jsoup。

String htmlString = EntityUtils.toString(entity4); // full html as a string                                 
Document htmlDoc = Jsoup.parse(htmlString); // .. as a Jsoup Document
Elements tables = htmlDoc.getElementsByTag("table"); //important part

现在我可以在 WebView 中加载 tables.toString() 并显示它。现在,我想将存储在资产文件夹中的 CSS 文件与此页面链接。我知道我可以拥有类似的东西

<LINK href="styles/file.css" type="text/css" rel="stylesheet">   

在我的 html 中,但如何链接它以使用我在本地存储的那个?

---编辑--- 我现在改成这样了:

StringBuilder sb = new StringBuilder();
    sb.append("<HTML><HEAD><LINK href=\"file:///android_asset/htmlstyles_default.css\" type=\"text/css\" rel=\"stylesheet\"/></HEAD><body>");
    sb.append(tables.toString());
    sb.append("</body></HTML>");
    return sb.toString();

不知何故,我没有将样式应用于页面。是不是我用的定位路径不对?

【问题讨论】:

如果请求获取网页,css文件没有下载,必须通过更改表格样式的位置来指定自己 我知道,我已经做了一个;) 所以现在您必须将此文件存储在您的应用程序中(文件、变量、..)并使用相同的 jsoup 更改 link.href 的路径 【参考方案1】:

Seva Alekseyev 是对的,您应该将 CSS 文件存储在 assets 文件夹中,但是通过 file:///android_asset/filename.css 引用 URL 对我不起作用。

还有另一种解决方案:将 CSS 放在 assets 文件夹中,使用 HTML 进行操作,但通过相对路径引用 CSS,然后通过 loadDataWithBaseURL() 方法将 HTML 加载到 WebView: p>

webView.loadDataWithBaseURL("file:///android_asset/", htmlString, "text/html", "utf-8", null);

例如你有styles.css文件,把它放到assets文件夹,创建HTML并加载它:

StringBuilder sb = new StringBuilder();
sb.append("<HTML><HEAD><LINK href=\"styles.css\" type=\"text/css\" rel=\"stylesheet\"/></HEAD><body>");
sb.append(tables.toString());
sb.append("</body></HTML>");
webView.loadDataWithBaseURL("file:///android_asset/", sb.toString(), "text/html", "utf-8", null);

附:感谢Peter Knego's answer。

【讨论】:

你是救生员。谢谢!! 是否可以使用 assets 文件夹中的 html 文件来执行此操作?到目前为止,它看起来只是使用 html 文件的数据字段,我没有将它存储在变量中。【参考方案2】:

您不能在res 中存储任意文件 - 只能存储特定资源类型(可绘制对象、布局等)。 CSS 应该转到 assets 文件夹。然后可以通过以下网址引用:file:///android_asset/MyStyle.css

【讨论】:

您的 HTML 格式严重错误 - 您需要在开头使用 &lt;html&gt;&lt;head&gt;,在结尾还需要 &lt;/body&gt;&lt;/html&gt;,而不是另一个 &lt;body&gt; 可以在 res/raw 中存储任意文件。【参考方案3】:

在相关说明中,如果您将文件存储在资产文件夹中并希望使用相对路径,Android 上的 Webview 有时需要在相对路径之前使用点斜杠。

<LINK href="./styles/file.css" type="text/css" rel="stylesheet">

见this post

【讨论】:

以上是关于WebView,将本地 .CSS 文件添加到 HTML 页面?的主要内容,如果未能解决你的问题,请参考以下文章

android中webview加载html,用本地的css渲染页面如何做

将 HTML 文件加载到 WebView

如何在 WebView Cocoa / Mac OS 上加载带有图像、js 和 css 的本地 html 文件

是否可以在我的 Assets 文件夹中仅使用一个样式表将自定义 CSS 添加到 Xamarin 中的 WebView?

WKWebview加载本地图片时出现路径问题

关于Android中WebView在加载网页的时候,怎样应用本地的CSS效果