在生成时,编译器将引发以下错误:
错误由于System.NullReferenceException,无法为类App.Droid.Controls.WebViewJavaScriptInterface创建JavaTypeInfo:对象引用未设置为对象的实例。在Java.Interop.Tools.JavaCallableWrappers.JavaCallableWrapperGenerator.Signature..ctor(在Java.Interop.Tools.JavaCallableWrappers.JavaCallableWrapperGenerator.Signature..ctor(在Java.Interop.Tools.JavaCallableWrappers.JavaCallableWrapperGenerator.Signature..ctor( Java.Interop.Tools.JavaCallableWrappers.JavaCallableWrapperGenerator.AddMethod上的MethodDefinition方法,ExportAttribute导出)互操作工具。
我已经为Webview创建了一个自定义渲染器,试图在其中注入JavaScriptInterface。我有一个不同项目的解决方案,这可能是导致上述问题的原因,也可能不是。
public class WebviewRendererEX : WebViewRenderer
{
Context _context;
public WebviewRendererEX(Context context) : base(context)
{
_context = context;
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{
base.OnElementChanged(e);
if (Control != null)
{
CookieManager cm = CookieManager.Instance;
cm.SetAcceptCookie(true);
cm.SetAcceptThirdPartyCookies(Control, true);
Control.Settings.JavaScriptEnabled = true;
Control.Settings.DomStorageEnabled = true;
Control.AddJavascriptInterface(this, "Android");
Device.BeginInvokeOnMainThread(() =>
{
Control.EvaluateJavascript("function someNavigate(dict){Android.navigateTo(dict);}", null);
});
}
}
}
public class WebViewJavaScriptInterface : Java.Lang.Object
{
private Context context;
public WebViewJavaScriptInterface(Context context)
{
this.context = context;
}
[Java.Interop.Export("navigateTo")]
[JavascriptInterface]
public void …Run Code Online (Sandbox Code Playgroud)