我有一个加载离线HTML的webview。我的离线HTML包含
文本
本地图片
嵌入式视频
一切正常但是当用户没有互联网连接时,'text'和'images'加载正常,但'嵌入视频'部分显示一个丑陋的NO INTERNET CONNECTION错误。
我的问题是如何处理此错误并将其替换为我自己的自定义错误。
我想继续显示我的html中的所有其他内容,即使没有互联网连接,但用自定义错误消息替换嵌入的视频错误消息。
任何人都知道如何实现这一目标? 干杯
我的网页视图代码
webView.ClearCache(true);
webView.ClearHistory();
string HTML_DATA = "";
if (File.Exists(localPath))
{
string HTML_LOCAL = File.ReadAllText(localPath);
HTML_DATA = HTML_LOCAL;
}
webView.Settings.JavaScriptEnabled = true;
webView.Settings.LoadWithOverviewMode = true;
webView.Settings.UseWideViewPort = true;
webView.SetWebViewClient(new WebViewClientClass());
webView.LoadDataWithBaseURL("file:///android_asset/", HTML_DATA, "text/html", "UTF-8", null);
现在结果如下
使用互联网
没有互联网
答案 0 :(得分:0)
我的问题是如何处理此错误并将其替换为我自己的自定义错误。
您可以在WebViewClient中处理它,如下面的代码,但它将用您的错误页面替换整个WebView页面:
public class MyClient:WebViewClient
{
public Context _context;
public MyClient(Context c)
{
_context = c;
}
public override void OnReceivedError(WebView view, IWebResourceRequest request, WebResourceError error)
{
base.OnReceivedError(view, request, error);
var errMsg = error.DescriptionFormatted;
Toast.MakeText(_context, errMsg, ToastLength.Long).Show();
string htmlData = $"<html><body><div align='center'>This is the description for the load fail : {errMsg}</div></body>";
view.LoadUrl("about:blank");
view.LoadDataWithBaseURL(null, htmlData, "text/html", "UTF-8", null);
view.Invalidate();
}
...
或者,你可以在Html中处理错误,你可以定义一个与你的webview相同大小的错误窗口,并根据互联网状态隐藏/显示它:
<DOCTYPE>
<html>
<head></head>
<body>
<iframe id="mFrame" width="854" height="480" src="https://www.youtube.com/embed/a5GMRrEJaVo" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
<div id="errorWindow" width="854" height="480">
This is the div for your custom error view
</div>
<script>
(function(){
"use strict"
var mIframe=document.getElementById("mFrame");
var errorWindow=document.getElementById("errorWindow");
if(navigator.onLine)
{
//internet available
mIframe.hidden=false;
errorWindow.hidden=true;
}else
{
//internet not available
mIframe.hidden=true;
errorWindow.hidden=false;
}
})()
</script>
</body>
注意:您必须定义以下权限才能使navigator.onLine
工作:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />