Android 使用自定义HTML和预定义的基本URL将CSS文件从资源加载到Web视图
我需要将运行时构建的一些HTML加载到WebView中,并将CSS文件应用到资产目录中的。我已经有了一个基本URL,我需要提供给webview的Android 使用自定义HTML和预定义的基本URL将CSS文件从资源加载到Web视图,android,html,css,webview,Android,Html,Css,Webview,我需要将运行时构建的一些HTML加载到WebView中,并将CSS文件应用到资产目录中的。我已经有了一个基本URL,我需要提供给webview的loadDataWithBaseURL函数 代码段(不应用CSS文件): StringBuffer buff=新的StringBuffer(); buff.追加(“”); buff.追加(“”); buff.追加(“”); buff.追加(“”); buff.append(“标题”); buff.追加(“”); buff.追加(“”); buff.追加(
loadDataWithBaseURL
函数
代码段(不应用CSS文件):
StringBuffer buff=新的StringBuffer();
buff.追加(“”);
buff.追加(“”);
buff.追加(“”);
buff.追加(“”);
buff.append(“标题”);
buff.追加(“”);
buff.追加(“”);
buff.追加(“”);
buff.append(“内容”);
buff.append(“”)
WebView.loadDataWithBaseURL(MY_BASE_URL,buff.toString(),“text/html”,HTTP.UTF_8,null);
我已经研究了这两个类似的问题&,但我的案例略有不同,因为我无法给出file:///android_asset/
作为loadDataWithBaseURL
函数的基本url
您知道如何在这种情况下应用CSS文件吗?如果您想拦截来自
WebView
的一些请求,可以通过覆盖WebViewClient
中的shouldInterceptRequest()
来实现,如下所示:
public WebResourceResponse shouldInterceptRequest (final WebView view, String url) {
if (URLUtil.isFileUrl(url) && url.contains(".css")) {
return getCssWebResourceResponseFromAsset();
} else {
return super.shouldInterceptRequest(view, url);
}
}
这里已经有一个非常详细的答案
但是
由于安全原因,如果您的基本url不是本地的,则无法访问本地文件。因此,请给出css的相对路径,然后拦截请求
我建议使用一种模式来区分b/w实际相对路径和自定义相对路径。e、 g.使用
android\u asset/my\u css\u file.css
而不是my\u css\u file.css
,并相应地修改shouldInterceptRequest()
,始终使用前面提到的代码拦截从android\u asset开始的请求,并替换href=\”file:///android_asset/my_css_file.css\“with href=\“my\u css\u file.css\”我成功了。。thnx
public WebResourceResponse shouldInterceptRequest (final WebView view, String url) {
if (URLUtil.isFileUrl(url) && url.contains(".css")) {
return getCssWebResourceResponseFromAsset();
} else {
return super.shouldInterceptRequest(view, url);
}
}