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

标签 xamarin xamarin.android custom-renderer

几个月前,我根据中的示例代码为 Web View 创建了一个自定义 Xamarin.Android 渲染器 https://learn.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/hybridwebview

Javascript 代码完美地调用了我的 C# 代码,但是最近在最新更新之后,WebView 控件不再能够调用 C# 操作, (更准确地说,如果我的目标是 Android 9.0(API 级别 28)或更高版本) 使用 API 级别 27 仍然可以正常工作

经过更多调查,我发现编译器在 [JavascriptInterface] is being obsolete 上发出了警告! https://learn.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>

可以引用https://stackoverflow.com/a/54069075/10768653

关于xamarin - Xamarin.Android 中的 JavascriptInterface 已过时,无法从 Javascript 调用 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58739703/

相关文章:

android - Amazon IAP 不调用监听器回调(Kindle Fire、Xamarin)

android - Xamarin Android 运行时异常

xamarin - 具有透明背景的 PushModalAsync Xamarin 表单

webview - 如何在 Xamarin.Forms 中的 Android WebView 上启用本地存储

ios - 如何在 Xamarin Forms iOS 中显示小型大写字母字体样式的标签?

c# - 等待句柄和 Xamarin 表单

android - Xamarin,安卓;全局定位系统 : Why is my app going into "OnProviderEnabled"?

c# - 由于缺少 .dll.mdb 文件,Xamarin 无法构建

c# - 减少 Xamarin.forms 中 UWP MasterDetailPage Master 的宽度

xamarin - 在 Xamarin Forms 和 MVVM 中定义命令方法的返回类型