我正在尝试用Xamarin在我的Android WebView中加载一个本地保存的HTML文件。我创建了一个CustomRenderer来访问Android WebView的原生功能。HTML内容加载得很好,但问题是我的css和js引用没有加载进去。我试图用LoadDataWithBaseURL()
函数操作baseUrl,但是由于某种原因,样式表和脚本没有加载。
我的引用总是一样的,链接看起来像这样的href="/css/stylesheet.css"
。我可以操作HTML中的字符串,但我想尝试通过使用不同的基本URL加载内容来实现这一点。
我的文件存储方式如下:
/data/user/0/<api-key>/files/wwwroot/css/stylesheet.css"
脚本在不同的子文件夹中,等等。我在我的WebView中设置了以下设置:
string baseUrl = _hhwebView.WWWROOT_PATH; ///data/user/0/<api-key>/files/wwwroot/
_webView.Settings.AllowContentAccess = true;
_webView.Settings.AllowFileAccess = true;
_webView.Settings.AllowFileAccessFromFileURLs = true;
_webView.Settings.AllowUniversalAccessFromFileURLs = true;
_webView.LoadDataWithBaseURL(baseUrl, content, "text/html", "UTF-8", null);
有谁知道我如何做到这一点吗?提前谢谢。
发布于 2019-08-02 12:35:55
我通过覆盖WebViewClient
上的ShouldInterceptRequest
方法解决了这个问题,而不是从字符串加载内容,我通过URL加载了内容,如下所示:
_webView.LoadUrl("file://" + _hhwebView.WWWROOT_PATH + "/content.html");
我的覆盖方法看起来像这样:
public override WebResourceResponse ShouldInterceptRequest(WebView view, IWebResourceRequest request)
{
string url = request.Url.ToString();
if (url.Contains(".css"))
{
string file = url.Replace("file:///", "");
return ReturnResourceFile("text/css", "css", file.Split('/')[1]);
}
if (url.Contains(".js"))
{
string file = url.Replace("file:///", "");
return ReturnResourceFile("text/javascript", "js", file.Split('/')[1]);
}
return base.ShouldInterceptRequest(view, request);
}
private WebResourceResponse ReturnResourceFile(string mimeType, string extension, string file)
{
return new WebResourceResponse(mimeType, "UTF-8", File.OpenRead(Path.Combine(_hhwebView.WWWROOT_PATH, extension, file)));
}
https://stackoverflow.com/questions/57309803
复制相似问题