Невозможно вызвать метод Sanitize из javascript в Android 4.4, где то же самое работает в Android 4.1 - PullRequest
0 голосов
/ 07 мая 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 голосов
/ 13 мая 2018

Может кто-нибудь попытаться решить, как вызвать метод sanitize. если мы снова добавим [Export] & [JavascriptInterface], он будет работать, но в идеале нет необходимости в этих аннотациях для вызова sanitize.

Как сказано в официальной документации , вы должны добавить JavascriptInterface аннотацию к методу, если targetSdkVersion равен 17 (Android 4.2) или выше.

Внимание: если вы установили свой targetSdkVersion на 17 или выше, вы должны добавить аннотацию @JavascriptInterface к любому методу, который вы хотите использовать в своем JavaScript (метод также должен быть общедоступным). Если вы не предоставите аннотацию, этот метод не будет доступен вашей веб-странице при работе на Android 4.2 или более поздней версии.

...