using Foundation; using System; using WebKit; namespace Shared { /// /// MyEchartsViewOn HDLON+ /// public class MyEchartsViewOn : View { //EchartRootJson jsonData = new EchartRootJson() { }; /// /// option的配置json /// string optionJsonString; /// /// WKWebView控件 /// WKWebView uIWebView; /// /// /// public MyEchartsViewOn() { //jsonData = new EchartRootJson(); //默认布局,宽高为0的话会异常 var mFrame = new CoreGraphics.CGRect(base.X, base.Y, 10, 10); uIWebView = new WKWebView(mFrame, new WKWebViewConfiguration()) { }; uiView = uIWebView; uIWebView.ScrollView.Bounces = false; uIWebView.ScrollView.ScrollEnabled = false; uIWebView.NavigationDelegate = new OnWKNavigationDelegate(this); //var filePath = NSBundle.MainBundle.PathForResource("echarts", "html"); var filePath = NSBundle.MainBundle.PathForResource("echartsNew", "html"); var url = new NSUrl(filePath, false); uIWebView.LoadFileUrl(url, url); } /// /// 加载本地HTML /// public void LoadFileUrl() { var filePath = NSBundle.MainBundle.PathForResource(htmlPathName, "html"); var url = new NSUrl(filePath, false); uIWebView.LoadFileUrl(url, url); } /// /// /// string htmlPathName = "echarts"; public string HtmlPathName { get { return htmlPathName; } set { htmlPathName = value; LoadFileUrl(); } } /// /// 是否采用LoadEchartsNew的方式 /// bool IsLoadEchartsNew = false; /// /// 加载Option配置参数 /// 刷新图表 /// /// public void ShowWithOption(string option) { IsLoadEchartsNew = true; optionJsonString = option; EvaluateJavascript(); } /// /// 加载Option配置jsonString /// /// public void ShowWithOptionJsonString(string jsonString) { IsLoadEchartsNew = false; optionJsonString = jsonString; EvaluateJavascript(); } /// /// EvaluateJavascript /// public void EvaluateJavascript() { WKJavascriptEvaluationResult handler = (NSObject result, NSError err) => { if (err != null) { HDLUtils.WriteLine("EvaluateJavascript:" + err); } if (result != null) { HDLUtils.WriteLine("EvaluateJavascript:" + result); } }; //是否调用loadEchartsNew if (IsLoadEchartsNew) { uIWebView.EvaluateJavaScript($"loadEchartsNew({optionJsonString})", handler); } else { uIWebView.EvaluateJavaScript($"loadEcharts({optionJsonString})", handler); } } /// /// OnWKNavigationDelegate /// public class OnWKNavigationDelegate : WKNavigationDelegate { [Weak] MyEchartsViewOn _MyEchartsViewOn; public OnWKNavigationDelegate(MyEchartsViewOn view) { _MyEchartsViewOn = view; } public override void DidFinishNavigation(WKWebView webView, WKNavigation navigation) { Console.WriteLine("WKWebView DidFinishNavigation"); _MyEchartsViewOn.EvaluateJavascript(); } } } }