Android Xamarin中的WebView.EvaluateJavaScript问题

时间:2015-05-15 10:07:23

标签: android xamarin xamarin.android

我使用以下代码将Java Script注入我的Android Web视图

web视图

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:在类Landroid / webkit / WebView中没有name ='evaluateJavascript'cignal ='(Ljava / lang / String; Landroid / webkit / ValueCallback;)V'的方法;

任何人都可以帮我找一下我的实施方法。

2 个答案:

答案 0 :(得分:1)

我将链接到我在下面找到答案的位置,但基本上你需要检查Android KitKat(4.4),因为直到那时才引入该功能。如果设备运行低于4.4,那么如果您确实需要对其进行操作,则可能需要执行不同的操作以获取值。例如使用某种Hybrid WebView(或许查看Xamarin Forms Labs版本)和/或使用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(我显然已经链接到很多人),其中包括为Xamarin Forms执行此操作,但也提到了Android 4.2到JS引擎的更改。运行JavaScript可能是第一次运行,但它也将文档对象设置为脚本结果,因此您可能需要将document.getElementById()的结果分配给变量以解决此问题:var x = document.getElementById()

答案 1 :(得分:0)

JavaScriptResult 类必须继承自 Java.Lang.Object,如下所示:

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