2015-01-27 15 views
10

Mam problem z dziwnym problemem. Próbuję wczytać stronę https, ale po raz pierwszy przeglądarka internetowa nie ładuje się. Po odczekaniu 60 sekund, muszę ponownie kliknąć przycisk, aby załadować moją stronę. Moje urządzenie to Nexus 4 z Lollipopem, ale ten problem występuje również na urządzeniach z Androidem 4.4 i 4.1. Adres URL nie ma ciężkiej zawartości tylko kilka plików javascript i plików css.Podgląd strony nie ładuje się po raz pierwszy

Log:

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! 

Mój kod:

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()); 
     } 
    }); 
*/ 

ustawić nowy WebClient() nadrzędnymi następujące metody: shouldOverrideUrlLoading, onLoadResource, onPageFinished.For Próby zastosowania, usunąłem ten niestandardowy WebClient ale nadal nie było obciążenia po raz pierwszy.

Dzięki

+1

masz jakieś rozwiązanie tego problemu, ponieważ mam ten sam problem. –

+0

to samo tutaj, nie działa po raz pierwszy ... –

+0

Czy rozwiązałeś ten problem? ja też mam do czynienia z tym samym. – Riser

Odpowiedz

-2

Czy zadeklarował zgodę Internetu w AndroidManifest.xml?

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

spróbuj również ustawić klienta przeglądarki.

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

     }); 
+0

Tak, już dodałem to uprawnienie. Dodaję klienta Chrome i zawsze za pierwszym razem zatrzymuję postęp na poziomie 10%. – Esdras

+0

Gdyby nie miał ustawionego uprawnienia, nigdy by się nie załadował ... nawet po 60 sekundach ... –

0

Ponieważ jesteś ładowania https url w WebView, spowoduje to certyfikat SSL wystawia więc trzeba zastąpić jedna metoda dla obsługi problem certyfikacji i obsługiwać go w każdym razie Oto kod, jak można rozwiązać to

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

EDIT: jeśli chcesz włączyć javascript interfejs dla WebView wykonać następującą procedurę

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

I kod javascript trafi tutaj

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

Nie działa = /. Rozumiem, że adres URL ładuje css i js z innego serwera (jquery from code.jquery.com) i czcionkę z fonts.google.com. Oba pliki są wymagane przy użyciu protokołu https. Spróbuję dodać te dwa pliki na moim serwerze i przetestować ponownie. Czy masz jakiś inny pomysł? – Esdras

+0

@Esdras Sprawdź moje edycje –

2

Poznałem ten sam problem. Spędziłem ponad 3 dni i znalazłem przyczynę, dla której inny obiekt WebView wywołuje funkcję pauseTimers() w celu zapisania pewnej wydajności procesora, która faktycznie "wstrzymuje wszystkie układy, parsowanie i zegary JavaScript dla wszystkich WebView."

+0

Thx koleś za uratowanie mi życia :), po debugowaniu całego dnia: | – droida

0

Rozwiązałem ten sam problem, dodając podgląd strony internetowej do układu z funkcji onPageFinished(WebView view, String url), po jej załadowaniu.

Powiązane problemy