【问题标题】:Xamarin Forms - Android not load site with HybridWebViewRendererXamarin Forms - Android 不使用 HybridWebViewRenderer 加载站点
【发布时间】:2018-03-20 13:27:19
【问题描述】:

有谁知道为什么 WebView 只用我的网站 url 显示白色或空白页面?

注意 如果我按住白色/空白页,我可以选择“全选”和“复制”。之后,我将它粘贴到一个便笺中,我可以看到我网站的内容。怎么了?

我的代码

    var webView = new Android.Webkit.WebView(Forms.Context);

                    webView.Settings.JavaScriptEnabled = true;
                    webView.Settings.LoadsImagesAutomatically = true;
                    webView.SetWebViewClient(new MyBrowser());
                    webView.Settings.SetAppCacheMaxSize(5 * 1024 * 1024);
                    webView.Settings.SetAppCachePath(Context.CacheDir.AbsolutePath);
                    webView.Settings.AllowFileAccess = true;
                    webView.Settings.SetAppCacheEnabled(true);
                    webView.Settings.CacheMode = CacheModes.Default;
                    webView.Settings.DomStorageEnabled = true;
                    webView.PostUrl("<MyURL>", Convert.FromBase64String("<mystring>"));
                if (DetectConnection.checkInternetConnection())
                    {
                        webView.Settings.CacheMode = CacheModes.CacheElseNetwork;
                    }

                    SetNativeControl(webView);

                if (oldHWV != null)
                {

                    Control.RemoveJavascriptInterface("jsBridge");

                    oldHWV.Cleanup();

                }

                if (newHWV != null)
                {

                    Control.AddJavascriptInterface(new JSBridge(this), "jsBridge");

                    Control.LoadUrl(Element.Uri);

                    InjectJS(JavaScriptFunction);
                }
            }

            void InjectJS(string script)

            {

                if (Control != null)
                {

                    Control.LoadUrl(string.Format("javascript: {0}", script));

                }

            }

class MyBrowser : WebViewClient
    {
        override public bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, string url)
        {
                view.LoadUrl(url);
                return false;
        }

    }

输出

10-09 12:14:20.651 W/art (18729):JNI RegisterNativeMethods: 尝试注册 0 个本地方法 md5db941dcc072fe623e29eb3b9d0ecdde3.HybridWebViewRenderer 10-09 12:14:20.732 I/WebViewFactory(18729): 加载 com.android.webview 版本 44.0.2403.119(代码 246011900)10-09 12:14:20.778 W/系统 (18729):ClassLoader 引用了未知路径: /system/app/webview/lib/arm 10-09 12:14:20.796 I/LibraryLoader(18729): 加载本机库的时间:9 毫秒(时间戳 258-267)10-09 12:14:20.796 I/LibraryLoader(18729):预期的本机库版本 number "",实际原生库版本号"" [INFO:library_loader_hooks.cc(120)] Chromium 日志记录已启用:级别 = 0,默认详细程度 = 0 10-09 12:14:20.823 V/WebViewChromiumFactoryProvider(18729):将 Chromium 绑定到 main Looper Looper(主要,tid 1){b95d216} 10-09 12:14:20.823 I/LibraryLoader(18729):预期的本机库版本号 "",实际原生库版本号"" 10-09 12:14:20.824 我/铬(18729):[信息:library_loader_hooks.cc(120)]铬 启用日志记录:级别 = 0,默认详细程度 = 0 10-09 12:14:20.834 I/BrowserStartupController(18729):初始化铬进程, singleProcess=true 10-09 12:14:20.835 W/art (18729):尝试 删除非 JNI 本地引用,转储线程 10-09 12:14:20.836 E/SysUtils(18729):ApplicationStatus 中的 ApplicationContext 为空 [警告:resource_bundle.cc(285)] locale_file_path.empty() 10-09 12:14:20.855 W/铬(18729):[警告:resource_bundle.cc(285)] locale_file_path.empty() 10-09 12:14:20.864 E/libEGL (18729): validate_display:255 错误 3008 (EGL_BAD_DISPLAY) 10-09 12:14:20.864 E/libEGL (18729): validate_display:255 错误 3008 (EGL_BAD_DISPLAY) 10-09 12:14:20.924 E/DataReductionProxySettingListener(18729): 没有 DRP 由于异常的关键:java.lang.ClassNotFoundException: com.android.webview.chromium.Drp 10-09 12:14:20.968 W/艺术 (18729): 尝试删除非 JNI 本地引用,转储线程 10-09 12:14:20.979 W/AwContents(18729):onDetachedFromWindow 调用时 已经分离。忽略已解决的挂起断点 'HybridWebViewRenderer.cs:180,1' 无效 .Droid.MyBrowser.OnReceivedError (Android.Webkit.WebView 查看,Android.Webkit.IWebResourceRequest 请求, Android.Webkit.WebResourceError 错误)[0x00001]。 10-09 12:14:21.188 D/Mono (18729): 图像地址引用 Mono.Android.Export[0x969fcfc0] -> Mono.Android.Export.dll[0x969aa600]: 2 10-09 12:14:21.188 D/Mono
(18729):准备设置程序集“Mono.Android.Export” (Mono.Android.Export.dll) 10-09 12:14:21.188 D/Mono (18729): 程序集 Mono.Android.Export[0x969fcfc0] 添加到域 RootDomain, ref_count=1 10-09 12:14:21.190 D/Mono (18729): AOT: 图像 未找到“Mono.Android.Export.dll.so”:dlopen 失败:库 “/data/app//lib/arm/libaot-Mono.Android.Export.dll.so”不是 发现 10-09 12:14:21.191 D/Mono (18729): AOT: image '/usr/local/lib/mono/aot-cache/arm/Mono.Android.Export.dll.so' 不是 找到:dlopen 失败:库 “/data/app//lib/arm/libaot-Mono.Android.Export.dll.so”不是 发现 10-09 12:14:21.191 D/Mono (18729): 配置试图 解析:'Mono.Android.Export.dll.config'。 10-09 12:14:21.191 D/单声道
(18729):配置尝试解析: '/usr/local/etc/mono/assemblies/Mono.Android.Export/Mono.Android.Export.config'。 10-09 12:14:21.192 D/Mono (18729): 大会参考地址 Mono.Android.Export[0x969fcfc0] -> mscorlib[0xa9e73f00]: 66 已加载 程序集:Mono.Android.Export.dll [外部] 10-09 12:14:21.200 D/Mono (18729): 程序集参考 addref Mono.Android.Export[0x969fcfc0] -> Mono.Android[0xa8ee2d80]: 36 10-09 12:14:21.215 D/Mono (18729): 程序集 Ref addref Mono.Android.Export[0x969fcfc0] -> System.Xml[0x98469fc0]: 4 加载程序集:callback_factory [外部] 10-09 12:14:21.382 D/Mono (18729):大会参考地址 Mono.Android.Export[0x969fcfc0] -> System.Core[0xa8ee3680]:8 10-09 12:14:21.389 W/art (18729):尝试删除非 JNI 本地 参考,转储线程 10-09 12:14:21.389 W/art (18729): 尝试删除非 JNI 本地引用,转储线程 10-09 12:14:21.402 D/Mono (18729): DllImport 搜索:'__Internal' ('(空值)')。 10-09 12:14:21.402 D/Mono (18729): 搜索 'java_interop_jnienv_call_float_method_a'。 10-09 12:14:21.402 D/单声道
(18729):探测“java_interop_jnienv_call_float_method_a”。 10-09 12:14:21.402 D/Mono (18729):发现为 'java_interop_jnienv_call_float_method_a'。 10-09 12:14:21.487 I/Choreographer(18729):跳过了 52 帧!该应用程序可能是 在其主线程上做太多工作。 [警告:data_reduction_proxy_config.cc(423)] SPDY 代理在 启动 10-09 12:14:21.506 W/铬(18729): [警告:data_reduction_proxy_config.cc(423)] SPDY 代理在 启动 10-09 12:14:21.570 W/BindingManager(18729):无法调用 确定的Visibility() - 从未看到pid的连接:18729 10-09 12:14:21.824 W/BindingManager(18729):无法调用 deniedVisibility() - 从未见过 pid: 18729 的连接

提前谢谢你

【问题讨论】:

  • 请检查网址是否正确,请尝试使用您的测试设备/模拟器的浏览器打开您的网站,检查是否可以正确打开。
  • 网址是正确的,我可以用设备/模拟器的浏览器打开它。如果我按住白色/空白页,我可以选择“全选”和“复制”。之后,我将它粘贴到一个便笺中,我可以看到我网站的内容。怎么了?
  • 我猜是布局或样式的问题,你可以尝试设置 webview 的大小,看看它是否能解决问题?
  • 我尝试修改布局,但没有任何改变

标签: android xamarin webview xamarin.forms xamarin.android


【解决方案1】:

在网络上使用不同的解决方案后,我创建了一个 pageRenderer。 我不知道这是否是最好的方法,但它对我有用。 如果有人有更好的解决方案,请告诉我。 提前谢谢你。

[assembly: ExportRenderer(typeof(WebPage), typeof(WebPageRenderer))]
namespace <my-namespace>
{
    class WebPageRenderer : PageRenderer
    {
        global::Android.Views.View view;
        global::Android.Webkit.WebView webView;

        Activity activity;

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

            if (e.OldElement != null || Element == null)
            {
                return;
            }

            try
            {
                Setup();
                AddView(view);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(@"ERROR: ", ex.Message);
            }
        }

        void Setup()
        {

            activity = this.Context as Activity;

            view = activity.LayoutInflater.Inflate(Resource.Layout.activity_webview, this, false);
            webView = view.FindViewById<Android.Webkit.WebView>(Resource.Id.webview);
            webView.SetWebViewClient(new WebViewClient());
            webView.Settings.JavaScriptEnabled = true;
            webView.LoadUrl("<my-url>");
        }

        protected override void OnLayout(bool changed, int l, int t, int r, int b)
        {
            base.OnLayout(changed, l, t, r, b);

            var msw = MeasureSpec.MakeMeasureSpec(r - l, MeasureSpecMode.Exactly);

            var msh = MeasureSpec.MakeMeasureSpec(b - t, MeasureSpecMode.Exactly);

            view.Measure(msw, msh);

            view.Layout(0, 0, r - l, b - t);

        }
    }

}

【讨论】:

    猜你喜欢
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    相关资源
    最近更新 更多