JavascriptInterface в Xamarin. Android устарел и не может вызвать C # из Javascript - PullRequest
1 голос
/ 07 ноября 2019

несколько месяцев назад у меня был пользовательский рендерер 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 #.

1 Ответ

1 голос
/ 07 ноября 2019

это все еще работает в моем проекте 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...