几个月前,我根据以下示例代码为Webview定制了Xamarin.Android渲染器:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/hybridwebview
Javascript代码完美地调用了我的C#代码,但是最近在进行最新更新之后,WebView控件不再能够调用C#操作,(更确切地说,如果我定位的是Android 9.0(API级别28)或更高版本)使用API级别27仍然可以正常工作
[经过更多调查后,我发现编译器在[JavascriptInterface]上发出警告已过时!https://docs.microsoft.com/en-us/dotnet/api/android.webkit.javascriptinterface?view=xamarin-android-sdk-9并且建议改用(IJavascriptInterface)
这里是要检查的代码
[JavascriptInterface]
[Export ("invokeAction")]
public void InvokeAction (string data)
{
HybridWebViewRenderer hybridRenderer;
if (hybridWebViewRenderer != null && hybridWebViewRenderer.TryGetTarget (out hybridRenderer))
{
hybridRenderer.Element.InvokeAction (data);
}
}
没有人知道如何正确地实现此功能以解决该问题并获得Javascript再次调用我的C#代码。
它仍然可以在我的Xamarin.Android项目中使用[JavascriptInterface]
进行工作>
这是我的示例的一部分:
类:var webview = FindViewById<WebView>(Resource.Id.webView1); WebSettings settings = webview.Settings; settings.JavaScriptEnabled = true; // load the javascript interface method to call the foreground method webView.AddJavascriptInterface(new MyJSInterface(this), "CSharp"); webview.SetWebViewClient(new WebViewClient());
MyJSInterface
class MyJSInterface : Java.Lang.Object { Context context; public MyJSInterface (Context context) { this.context = context; } [JavascriptInterface] [Export] public void ShowToast (string msg) { Toast.MakeText(context, msg, ToastLength.Short).Show(); } }
和html:
<button type="button" onClick="CSharp.ShowToast ('Call C#')">Call C#</button>