Xamarin.Android中的JavascriptInterface已过时,无法从Javascript调用C#

问题描述 投票:0回答:1

几个月前,我根据以下示例代码为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 xamarin.android custom-renderer
1个回答
0
投票

它仍然可以在我的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>

您可以参考https://stackoverflow.com/a/54069075/10768653

© www.soinside.com 2019 - 2024. All rights reserved.