Не удается вызвать метод Sanitize из javascript в Android 4.4, как это работает в Android 4.1 - PullRequest
0 голосов
/ 03 мая 2018

Невозможно вызвать метод 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;
    }
}

}

1 Ответ

0 голосов
/ 07 мая 2018

Uncaught TypeError: Object [object Object] не имеет метода 'bar' '

Метод должен быть Bar, а не bar.

Пожалуйста, измените html на это:

const string html = @"
<html><body><p>This is a paragraph.</p><button type=""button"" onClick=""Foo.Bar('test message')"">Click Me!</button></body></html> 
"; 
...