Android Xamarin 中的 WebView.EvaluateJavaScript 问题

Issue with WebView.EvaluateJavaScript in Android Xamarin

我正在使用以下代码将 Java 脚本注入我的 Android Web 视图

WebView

webView = FindViewById<WebView> (Resource.Id.learningWebView);
if (null != webView) {
    webView.Settings.JavaScriptEnabled = true;
    webView.Settings.SetSupportZoom (true);
    webView.SetWebViewClient (new CustomWebViewClient ());

 }

WebView 客户端实现

public class CustomWebViewClient : WebViewClient
{
    public override bool ShouldOverrideUrlLoading (WebView view, string url)
    {
        view.LoadUrl (url);
        return true;
    }

    public override void OnPageStarted (WebView view, string url, Android.Graphics.Bitmap favicon)
    {

    }

    public override void OnPageFinished (WebView view, string url)
    {
        base.OnPageFinished (view, url);
        HideLearningDivs (view);
    }


    void HideLearningDivs (WebView view)
    {
        try {

            view.EvaluateJavascript ("document.getElementById(\"suiteBar\").parentNode.style.display='none'", new JavaScriptResult ());
        } catch (Exception ex) {
            Console.WriteLine (ex.Message);
        }

    }

IValueCallback 实现

public class JavaScriptResult :  IValueCallback
{
    public IntPtr Handle {
        get;
        set;
    }

    public void Dispose ()
    {

    }



    public void OnReceiveValue (Java.Lang.Object result)
    {

    }
}

但是在执行应用程序时出现以下错误。

java.lang.NoSuchMethodError: [=44= 中没有名称='evaluateJavascript' signature='(Ljava/lang/String;Landroid/webkit/ValueCallback;)V' 的方法] Landroid/webkit/WebView;

谁能帮我找出我的实现有什么问题。

我会 link 到我在下面找到答案的地方,但基本上你需要检查 Android KitKat (4.4),因为那个功能直到那时才被引入。如果设备 运行 低于 4.4,那么如果您确实需要对它执行某些操作,则可能需要执行一些不同的操作才能取回该值。例如使用某种 Hybrid WebView(也许可以查看它的 Xamarin Forms Labs 版本)and/or 使用 AddJavaScriptInterface()

代码如下:

if(Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Kitkat) {
    webView.EvaluateJavascript("javascript:GoBack();", null);
} else {
    webView.LoadUrl("javascript:GoBack();");
}

https://forums.xamarin.com/discussion/24894/webview-evaluatejavascript-issues

*编辑:自从写这篇文章以来,我发现了一个 excellent post Adam Pedley(我显然最近经常 linking),它涵盖了为 Xamarin Forms 做这件事,但也提到了一个变化Android 4.2 到 JS 引擎。 运行 JavaScript 可能第一次工作,但它也会将文档对象设置为脚本结果,因此您可能需要将 document.getElementById() 的结果分配给变量才能变通这个:var x = document.getElementById().

JavaScriptResult class 必须继承自 Java.Lang.Object,像这样:

public class JavaScriptResult : Java.Lang.Object, IValueCallback
{            
    public void OnReceiveValue(Object value)
    {
        // ...               
    }
}