ОК ... поэтому у меня есть пользовательский HTMLWebview, к которому я хочу добавить Javascript. Многие примеры, которые я нахожу в Интернете, имеют уровень HTML на Android (и iOS), но я бы предпочел сохранить HTML в пользовательском рендерере (таким образом, я могу заполнить его пользовательским контентом на отдельных страницах) ,
Сейчас у меня есть кнопка, которая должна запускать событие, но оно не происходит, и я не уверен, почему.
Это мой пользовательский рендерер:
public class HybridWebView : WebView
{
public HybridWebView()
{
const string html = @"
<html>
<body>
<h3>Test page</h3>
<button type=""button"" onClick=""CSharp.ShowToast('Hello from JS')"">Native Interaction</button>
</body>
</html>";
var htmlSource = new HtmlWebViewSource();
htmlSource.BaseUrl = DependencyService.Get<IBaseUrl>().Get();
htmlSource.Html = html;
Source = htmlSource;
}
}
Это мой Android Рендерер:
[assembly: ExportRenderer(typeof(HybridWebView), typeof(HybridWebViewRenderer))]
namespace Test.Droid.Renderers
{
public class HybridWebViewRenderer : WebViewRenderer
{
Context _context;
public HybridWebViewRenderer(Context context) : base(context)
{
_context = context;
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (Control != null)
{
Control.Settings.JavaScriptEnabled = true;
Control.AddJavascriptInterface(new HybridJSBridge(Android.App.Application.Context), "CSharp");
}
base.OnElementPropertyChanged(sender, e);
}
}
}
Это мой мост:
public class HybridJSBridge : Java.Lang.Object
{
Context context;
public HybridJSBridge(Context context)
{
this.context = context;
}
[JavascriptInterface]
[Export]
public void ShowToast(string msg)
{
Toast.MakeText(context, msg, ToastLength.Short).Show();
}
}
Сейчас при нажатии кнопки ничего не происходит. Я надеюсь, что кто-то может указать мне правильное направление? Заранее спасибо!