Я пытаюсь получить HybridWebView, где код JS и C # могут общаться друг с другом. Я следовал официальным документам , и он прекрасно работает для вызова кода C # из JS. Тем не менее, мне нужен и другой путь, который не описан в упомянутом руководстве.
Вот как далеко я получил:
В моем контроллере HybridWebView я добавил следующие строки:
public event EventHandler CallJavascript;
public void InvokeJS()
{
if(CallJavascript != null)
{
CallJavascript(this, EventArgs.Empty);
}
}
В моем собственном рендерере я добавил метод CallJavascript, а в методе OnElementChanged()
protected override void OnElementChanged(ElementChangedEventArgs<HybridWebView> e)
{
base.OnElementChanged(e);
if (Control == null)
{
var webView = new Android.Webkit.WebView(_context);
webView.Settings.JavaScriptEnabled = true;
webView.SetWebViewClient(new JavascriptWebViewClient($"javascript: {JavascriptFunction}"));
SetNativeControl(webView);
}
if (e.OldElement != null)
{
Control.RemoveJavascriptInterface("jsBridge");
var hybridWebView = e.OldElement as HybridWebView;
hybridWebView.Cleanup();
e.OldElement.CallJavascript += OnElementCallJavascript;
}
if (e.NewElement != null)
{
Control.AddJavascriptInterface(new JSBridge(this), "jsBridge");
Control.LoadUrl($"file:///android_asset/Content/{Element.Uri}");
e.NewElement.CallJavascript += OnElementCallJavascript;
}
}
private void OnElementCallJavascript(object sender, EventArgs e)
{
var webView = new Android.Webkit.WebView(_context);
Device.BeginInvokeOnMainThread(() =>
{
webView.EvaluateJavascript("javascript:increaseCount();", null);
});
}
однако, веб-просмотр, который я получаю в моем OnElementCallJavascript, не является WebView, из которого я вызываю метод, поэтому никакой javascript не оценивается. Кто-нибудь понял, как я могу этого достичь?