无法在Android 4.4中从javascript调用Sanitize方法,因为在Android 4.1中也是如此

时间:2018-05-03 12:40:04

标签: c# android webview xamarin.android android-4.4-kitkat

无法在Android 4.4中调用来自javascript的Sanitize方法,其中Android 4.1中也是如此。我们可以从Android 4.1中调用Sanitize方法,如Foo.sanitize('test message'),其中同样的方法在4.4中不起作用。有人可以尝试解决如何调用sanitize方法。 如果我们添加[导出]& [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 :(得分:0)

  

未捕获TypeError:对象[object Object]没有方法'bar'“

该方法应为public static void main(String[] args) throws IOException{ ... } ,而不是Bar

请将bar更改为:

html