【问题标题】:Xamarin.Forms Javascript not working in android platformXamarin.Forms Javascript 在 android 平台上不起作用
【发布时间】:2017-10-30 12:05:39
【问题描述】:

我有 Xamarin.Forms 项目,我必须将我的代码中的对象注入到 Html 代码中,它在 Xamarin.iOS 中工作得很好,但在 Android 平台中却不行

    webView.Source = LoadHTMLFileFromResource();
                webView.Navigated += (sender, e) => {
                    webView.Eval("var x = document.getElementById('versionCode').innerHTML = '" + versionBuild + "';");
                };

private static HtmlWebViewSource LoadHtmlFileFromResource()
        {
            var source = new HtmlWebViewSource();
            var assembly = typeof(AboutPage).GetTypeInfo().Assembly;
            var stream = assembly.GetManifestResourceStream("about_us.html");
            using (var reader = new StreamReader(stream))
            {
                source.Html = reader.ReadToEnd();
            }
            return source;
        }

我试图解决这个问题,为网页视图进行自定义渲染

在安卓项目中

protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
        {
            base.OnElementChanged(e);


            if (Control == null)
            {
                var webView = new Android.Webkit.WebView(Forms.Context);
                webView.Settings.JavaScriptEnabled = true;
                SetNativeControl(webView);
            }

        }

但仍然无法工作,我可以在我的代码中运行我的脚本,我想念什么

【问题讨论】:

    标签: xamarin.forms xamarin.android


    【解决方案1】:

    我想出了答案,由于某种原因,webView.Navigated 没有被调用

     webView.Navigated += (sender, e) => {
                        webView.Eval("var x = document.getElementById('versionCode').innerHTML = '" + versionBuild + "';");
                    };
    

    所以我将 CustomWebViewClient 添加到我的客户渲染中并覆盖 OnPageFinished 方法以在此方法处执行我的 javascript 代码

        public class CustomWebViewClient : WebViewClient
                {
                    string javaScriptCode = "javascript:document.getElementById('versionCode').innerHTML = '" + "Version: " +
                                            GetAppVersionBuild() + "';";
    
                    public override void OnPageFinished(Android.Webkit.WebView webView, string url)
                    {
                     // UPDATE my answer to work in previous version before kitkat 
                       if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Kitkat)
                    {
                        webView.EvaluateJavascript(javaScriptCode, null);
                    }
                    else
                    {
                        webView.LoadUrl(javaScriptCode);
                    }
                    }
    
    
                }
    

    我的自定义渲染类

     protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
                {
                    base.OnElementChanged(e);
    
    
                    if (Control == null)
                    {
                        var webView = new Android.Webkit.WebView(Forms.Context);
                        webView.Settings.JavaScriptEnabled = true;
                        SetNativeControl(webView);
                    }
                    if (e.NewElement != null)
                    {
                        Control.Settings.JavaScriptEnabled = true;
                        Control.SetWebViewClient(new CustomWebViewClient());
                    }
    
    
                }
    

    我希望这可以帮助任何人面对同样的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-15
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 2018-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多