Невозможно вызвать метод Sanitize из javascript в Android 4.4, где то же самое работает в Android 4.1. мы можем вызвать метод Sanitize из android 4.1, например, Foo.sanitize («тестовое сообщение»), где то же самое не работает в 4.4. Может кто-нибудь, пожалуйста, попытайтесь решить, как вызвать метод sanitize.
если мы снова добавим [Export] & [JavascriptInterface], он будет работать, но в идеале нет необходимости в этих аннотациях для вызова sanitize.
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Webkit;
using Java.Interop;
using Android.Net;
namespace WebViewJavaScriptInterface
{
[Activity (Label = "Mono WebView ScriptInterface", MainLauncher = true)]
public class JavaScriptInterfaceActivity : Activity
{
const string html = @"<html><body><p>This is a paragraph.</p><button type=""button"" onClick=""Foo.sanitize('test message')"">Click Me!</button></body></html>";
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
WebView view = FindViewById<WebView> (Resource.Id.web);
view.Settings.JavaScriptEnabled = true;
view.SetWebChromeClient (new WebChromeClient ());
view.AddJavascriptInterface ((Java.Lang.Object)new Foo (this), "Foo");
view.LoadData (html, "text/html", null);
}
}
class Foo : Java.Lang.Object, UrlQuerySanitizer.IValueSanitizer
{
public Foo (Context context)
{
this.context = context;
}
Context context;
[Export]
[JavascriptInterface]
public void Bar (string message)
{
Console.WriteLine ("Foo.Bar invoked!");
Toast.MakeText (context, "This is a Toast from C#! " + message.ToString(), ToastLength.Short).Show ();
}
public string Sanitize(string value)
{
Console.WriteLine("Santizie.Bar invoked!");
return string.Empty;
}
}
}