xamarin.forms - Xamarin 表单 webview 未在我的设备中显示图表数据
问题描述
我已经使用 WebView 来使用 URL 显示数据,但我的图表视图没有加载到 webview 中,我还为 webview 提供了以下所有权限。
Control.Settings.JavaScriptEnabled = true;
Control.Settings.LoadWithOverviewMode = true;
Control.Settings.DatabaseEnabled = true;
Control.Settings.UseWideViewPort = true;
Control.Settings.AllowFileAccess = true;
Control.Settings.AllowContentAccess = true;
Control.Settings.AllowFileAccessFromFileURLs = true;
Control.Settings.AllowUniversalAccessFromFileURLs = true;
Control.Settings.JavaScriptCanOpenWindowsAutomatically = true;
Control.Settings.DomStorageEnabled = true;
Control.VerticalScrollBarEnabled = true;
Control.SetWebViewClient(new WebClient(this));
class WebClient : WebViewClient
{
WebViewRendererForAndroid _renderer;
public WebClient(WebViewRendererForAndroid renderer)
{
_renderer = renderer ?? throw new ArgumentNullException("renderer");
}
public override bool ShouldOverrideUrlLoading(AWebView view, string url)
{
try
{
var Token = UserSettings.AccesToken;
Dictionary<String, String> headers = new Dictionary<String, String>();
headers.Add("Authorization", Token);
view.LoadUrl(url, headers);
}
catch (Exception ex)
{
}
return true;
}
public override void OnReceivedError(AWebView view, IWebResourceRequest request, WebResourceError error)
{
base.OnReceivedError(view, request, error);
}
public override void OnReceivedHttpError(AWebView view, IWebResourceRequest request, WebResourceResponse errorResponse)
{
base.OnReceivedHttpError(view, request, errorResponse);
var source = new UrlWebViewSource { Url = request.Url.ToString() };
var args = new WebNavigatedEventArgs(WebNavigationEvent.NewPage, source, request.Url.ToString(), WebNavigationResult.Failure);
_renderer.ElementController.SendNavigated(args);
}
public override void OnReceivedError(AWebView view, [GeneratedEnum] ClientError errorCode, string description, string failingUrl)
{
base.OnReceivedError(view, errorCode, description, failingUrl);
var source = new UrlWebViewSource { Url = failingUrl };
var args = new WebNavigatedEventArgs(WebNavigationEvent.NewPage, source, failingUrl, WebNavigationResult.Failure);
_renderer.ElementController.SendNavigated(args);
}
}
解决方案
我已经使用 javascript 解决了这些问题,我们必须在页面加载完成后注入 javascript 函数。
public override void OnPageFinished(AWebView view, string url)
{
base.OnPageFinished(view, url);
view.LoadUrl("javascript:(loadData('" + Token + "'))");
}
推荐阅读
- android - ObjectBox:并发写入事务
- cordova - 在 Meteor 中 Wi-Fi 扫描 SSID
- google-apps-script - 如何使用 Babel 将 ES 6 的 new Set() 编译成 ES 5 语法?
- ios - 如何删除集合视图单元格之间的空间?
- group-by - 按减法bi分组
- c++ - 什么样的 GCC 优化可能会根据是否打印来改变双精度?
- javascript - firebase 数据未添加到数组 ionic 3
- twilio - Twilio JS 在 VoIP 呼叫中发送数字
- mongodb - 一次删除不同文档中多次出现的嵌入数组元素
- postgresql - postgres启动后如何防止docker退出