2017-10-09 71 views
0

有谁知道为什么WebView只显示白色或空白页面与我的网站网址?Xamarin Forms - Android无法加载网站与HybridWebViewRenderer

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

我的代码

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; 
     } 

    } 

输出

12月10日至9日:14:20.651 W /技术(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/System (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):预期本机库版本 号 “”,实际本地库版本号 “” [INFO:library_loader_hooks.cc(120)]铬启用日志记录:级别= 0,缺省冗长= 0 12月10日至9日:14:20.823 V/WebViewChromiumFactoryProvider(18729):绑定铬到主要 弯针活套(main,tid 1){b95d216} 10-09 12:14:20.823 I/LibraryLoader(18729):预期的本地库版本号 “”,实际本地库版本号“”10-09 12:14:20.824 I /铬(18729):[INFO: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):ApplicationContext已在ApplicationStatus 空[警告: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 error 3008(EGL_BAD_DISPLAY)10-09 12:14:20.864 E/libEGL(18729):validate_display:255 error 3008(EGL_BAD_DISPLAY) 10-09 12:14:20.924 E/DataReductionProxySettingListener(18729):No DRP 由于异常而导致的键:java.lang.ClassNotFoundException: com.android.webview.chromium.Drp 10-09 12:14:20.968 W/art(18729): 尝试删除非JNI本地引用,转储线程10-09 12:14:20.979 W/AwContents(18729):onDetachedFromWindow在 已经分离时调用。在 'HybridWebViewRenderer.cs:180,1' 忽略解决未决断点为void .Droid.MyBrowser.OnReceivedError(Android.Webkit.WebView 视图,Android.Webkit.IWebResourceRequest请求, Android.Webkit.WebResourceError误差)[0x00001 ]。 10-09 12:14:21.188 D/Mono(18729):Image addref Mono.Android.Export [0x969fcfc0] - > Mono.Android.Export.dll [0x969aa600]:2 10-09 12:14:21。188 D /单声道
(18729):准备设置程序集'Mono.Android.Export' (Mono.Android.Export.dll)10-09 12:14:21.188 D/Mono(18729): Assembly Mono .Android.Export [0x969fcfc0]添加到域RootDomain, ref_count = 1 10-09 12:14:21.190 D /单声道(18729):AOT:图像 未找到'Mono.Android.Export.dll.so':dlopen失败:library “/data/app//lib/arm/libaot-Mono.Android.Export.dll.so”not found 10-09 12:14:21.191 D/Mono(18729):AOT:image ' /usr/local/lib/mono/aot-cache/arm/Mono.Android.Export.dll.so'not found:dlopen failed:library “/data/app//lib/arm/libaot-Mono.Android .Export.dll.so“不是 found 10-09 12:14:21.191 D/Mono (18729):配置尝试到 parse:'Mono.Android.Export.dll.config'。 10-09 12:14:21.191 D/Mono
(18729):配置尝试解析: '/usr/local/etc/mono/assemblies/Mono.Android.Export/Mono.Android.Export.config'。程序库文件文件网可用的操作系统文件说明Mono.Android.Export [0x969fcfc0] - > mscorlib [0xa9e73f00]:66已加载 程序集:Mono.Android.Export.dll [External] 10-09 12:14:21.200 D/Mono (18729):Assembly Ref addref Mono.Android.Export [0x969fcfc0] - > Mono.Android [0xa8ee2d80]:36 10-09 12:14:21.215 D/Mono 18729): 大会参考的AddRef Mono.Android.Export [0x969fcfc0] - > 的System.Xml [0x98469fc0]:4加载组件:callback_factory [外部] 12月10日至9日:14:21.382 d /单声道(18729) :Assembly Ref addref 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 /单声道(18729) :DllImport搜索:'__Internal' ('(null)')。 10-09 12:14:21.402 D/Mono(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.402 D /单音(18729):找到 'java_interop_jnienv_call_float_method_a'。 10-09 12:14:21.487 I /编舞师(18729):跳过52帧!该应用可以是 做它的主线程的工作太多了。 [警告:data_reduction_proxy_config.cc(423)] SPDY代理OFF在 启动12月10日至9日:14:21.506 W /铬(18729): [警告:data_reduction_proxy_config.cc(423)]在SPDY启动 10代理OFF -09 12:14:21.570 W/BindingManager的(18729):无法调用 determinedVisibility() - 从没见过的PID的连接:18729 12月10日至9日:14:21.824 W/BindingManager的(18729):无法调用 determinedVisibility () - 从没见过的PID的连接:18729

预先感谢您

+0

请检查网址是否正确,并请尝试使用您的测试设备/模拟器的浏览器打开您的网站,检查它是否可以正确打开。 –

+0

该网址是正确的,我可以用设备/模拟器的浏览器打开它。如果我按住白色/空白页面,我可以选择“全选”和“复制”。之后,我将它粘贴在便条中,我可以看到我的网站的内容。怎么了? – Mikasa

+0

我想这是布局或样式的问题,你可以请尝试设置webview的大小,看看它是否解决了这个问题? –

回答

0

不同SOLUT后网络上的离子我创建了一个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); 

     } 
    } 

}