Webview不在第一次加载

我正在与一个奇怪的问题斗争。 我正在尝试加载https网页,但是第一次加载webview。 等待60秒后,我必须再次点击我的button来加载我的网页。 我的设备是带有棒棒糖的Nexus 4,但是这个问题也发生在使用Android 4.4和4.1的设备上。 该URL没有大量的内容只有一些JavaScript文件和CSS文件。

日志:

I/WebViewFactory﹕ Loading com.google.android.webview version 37 (1602158-arm) (code 111201) I/LibraryLoader﹕ Loading: webviewchromium I/LibraryLoader﹕ Time to load native libraries: 3 ms (timestamps 5331-5334) I/LibraryLoader﹕ Expected native library version number "",actual native library version number "" I/LibraryLoader﹕ Expected native library version number "",actual native library version number "" I/chromium﹕ [INFO:library_loader_hooks.cc(106)] Chromium logging enabled: level = 0, default verbosity = 0 I/BrowserStartupController﹕ Initializing chromium process, renderers=0 W/art﹕ Attempt to remove local handle scope entry from IRT, ignoring W/chromium﹕ [WARNING:resource_bundle.cc(315)] locale_file_path.empty() I/chromium﹕ [INFO:aw_browser_main_parts.cc(63)] Load from apk succesful, fd=72 off=159196 len=3264 I/chromium﹕ [INFO:aw_browser_main_parts.cc(78)] Loading webviewchromium.pak from, fd:73 off:229484 len:643667 W/AudioManagerAndroid﹕ Requires BLUETOOTH permission W/chromium﹕ [WARNING:proxy_service.cc(901)] PAC support disabled because there is no system implementation W/chromium﹕ [WARNING:data_reduction_proxy_settings.cc(403)] SPDY proxy OFF at startup W/art﹕ Attempt to remove local handle scope entry from IRT, ignoring W/AwContents﹕ onDetachedFromWindow called when already detached. Ignoring I/chromium﹕ [INFO:SkUtilsArm.cpp(179)] Device supports ARM NEON instructions! 

我的代码:

 final WebView wv = (WebView) alert.findViewById(R.id.modal_wv); wv.getSettings().setAppCacheEnabled(true); wv.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); wv.getSettings().setAppCachePath("/data/data/" + getPackageName() + "/cache"); wv.getSettings().setAllowFileAccess(true); wv.getSettings().setJavaScriptEnabled(true); wv.loadUrl(connectionResponse.getUrl()); /* //Same behavior ... wv.post(new Runnable() { @Override public void run() { wv.loadUrl(connectionResponse.getUrl()); } }); */ 

我设置了一个新的WebClient()覆盖了以下方法:shouldOverrideUrlLoading,onLoadResource,onPageFinished.Fortesting目的,我删除了这个自定义的WebClient,但它仍然没有在第一次加载。

谢谢

Solutions Collecting From Web of "Webview不在第一次加载"

我遇到了同样的问题。 我花了3天多时间,发现另一个WebView对象调用pauseTimers()来保存一些CPU性能的原因实际上是“暂停所有WebView的布局,parsing和JavaScript定时器”。

由于您在webview中加载httpsurl,因此会导致SSLauthentication问题,因此您必须重新处理另一个处理authentication问题的方法,并且无论如何都要处理这个代码,那么您如何解决这个问题

 myWebView.setWebViewClient(new WebViewClient() { @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(MainActivity.this, description, Toast.LENGTH_SHORT).show(); } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { // TODO Auto-generated method stub // this method will proceed your url however if certification issues are there or not handler.proceed(); } }); myWebView.loadUrl(url); 

编辑:如果你想为您的webview启用JavaScript界面​​执行以下过程

 private JavascriptInterface jsInterface; engine.getSettings().setJavaScriptEnabled(true); jsInterface = new JavascriptInterface(); try { ComponentName comp = new ComponentName(this, Dashboard.class); PackageInfo pinfo = getPackageManager().getPackageInfo(comp.getPackageName(), 0); jsInterface.versionCode = pinfo.versionCode; } catch (android.content.pm.PackageManager.NameNotFoundException e) { } engine.addJavascriptInterface(jsInterface, "androidlearnscripture"); engine.requestFocus(View.FOCUS_DOWN); } 

和JavaScript代码将在这里

  public void onPageStarted(WebView view, String url,Bitmap favicon) { jsInterface.enablePreferencesMenu = false; jsInterface.modalIsVisible = false; jsInterface.urlForSharing = null; bLoadingFinished = false; } 

我已经完成加载后,通过将webview添加到来自函数onPageFinished(WebView view, String url)的布局来解决同样的问题。

你有没有在androidmanifest.xml中声明Internet权限?

 <manifest...> .. . <uses-permission android:name="android.permission.INTERNET" /> .. </manifest> 

也尝试设置一个webview客户端。

  //default browser wv.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { L.log(url); return super.shouldOverrideUrlLoading(view, url); } }); //chrome browser wv.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { progressBar.setProgress(progress); if (progress == 100) { progressBar.setVisibility(View.GONE); } } });