2015-04-03 7 views
5

Perché alcune pagine non caricare nel mio WebView (ma sembrano funzionare bene in Chrome)? Per esempio:carichi URL in Chrome App, ma non WebView

ho impostato il mio WebView per consentire JS. Qui è il mio codice WebView init:

webView = (WebView) findViewById(R.id.webview); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setBuiltInZoomControls(true); 
    webView.getSettings().setDisplayZoomControls(false); 
    webView.getSettings().setDomStorageEnabled(true); 
    webView.setWebViewClient(new WebViewClient()); 

    webView.setWebChromeClient(new WebChromeClient() { 
     public void onProgressChanged(WebView view, int progress) { 

      progressBar.setProgress(progress); 

      if (progress == 100) { 
       progressBar.setVisibility(View.GONE); 
      } 
      else { 
       progressBar.setVisibility(View.VISIBLE); 
      } 
     } 
    }); 

    webView.loadUrl(url); 

risposta

0

Ho un codice WebView molto simile sul mio progetto, ho solo sostituito gli URL che ci avete fornito.

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_user_agreement); 
    WebView webView = (WebView) findViewById(R.id.userAgreementView); 
    final ProgressWheel progressWheel = (ProgressWheel) findViewById(R.id.progress_bar); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setBuiltInZoomControls(true); 
    webView.getSettings().setDisplayZoomControls(false); 
    webView.getSettings().setDomStorageEnabled(true); 
    //webView.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"); 
    Log.v("UA", webView.getSettings().getUserAgentString()); 
    String url = getIntent().getStringExtra("data"); //Urls provided by other activity 
    if (url != null && !url.equals("")) { 
     webView.setWebChromeClient(new WebChromeClient() { 
      public void onProgressChanged(WebView view, int progress) { 

       //progress wheel fills here etc. 
       // ... 
       // ... 
       } 
      } 
     }); 
    webView.loadUrl(url); 

    } 

} 

http://onlinelibrary.wiley.com/doi/10.1002/art.39115/pdf questo caricata come un fascino in WebView, senza difetti e nessun comportamento sbagliato.

Poi ho provato questo uno http://www.ajpmonline.org/article/S0749-3797(14)00628-X/fulltext, quando la webview completa il caricamento di una nuova attività nativa di Chrome si avvia immediatamente e carica la versione mobile della pagina in un'attività separata.

ho controllato il comportamento del sito web con il mio desktop Chrome, quando faccio una richiesta HTTP con una stringa user agent Android si scopre di fare le seguenti cose.

  1. ritorno codice di stato 302 e reindirizzare http://www.ajpmonline.org/action/mobileChoice?originalRequestUri=%2Farticle%2FS0749-3797%2814%2900628-X%2Ffulltext&userInterface=mobile
  2. impostare un cookie chiamato MobileUI e reindirizzare alla pagina originale con un codice di stato 302.
  3. Caricare la versione mobile della pagina a seconda del biscotto MobileUI. A quel punto il sito Web potrebbe eseguire un codice javascript per aprire una nuova finestra, il che spiega il comportamento del mio Galaxy S4 mini.

Quindi ho deciso di imitare la stringa dell'agente utente come browser desktop. Ho preso una stringa UA dal http://www.useragentstring.com/pages/Chrome/ e impostare in questo modo prima che il metodo loadURL e voilà!

webView.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"); 
    Log.v("UA", webView.getSettings().getUserAgentString()); 

Questa può essere una delle ipotesi bordo e seconda l'URL che si sta caricando il comportamento può cambiare, ma si può costringere a caricare versione desktop dei siti web con un adeguato stringa user agent.

+0

purtroppo non posso impostare il programma utente come un browser desktop, dal momento che io voglio le pagine mobili per caricare. Per quanto riguarda il primo link, mi rendo conto ora di avere un cookie di login impostato prima di provare l'URL.Il WebView ha solo problemi di caricamento quando accede al contenuto effettivo all'origine dell'URL, che non vedi perché non hai effettuato l'accesso. Fammi vedere se riesco a trovare un esempio migliore per quello. –

+0

In questo caso è possibile modificare il contenuto della pagina Web che causa problemi. http://stackoverflow.com/a/8274881/3399234 quella risposta mostra come farlo, ma di sicuro questa non è una soluzione ragionevole ed efficiente. – Ugur

+0

puoi provare con questo URL http://onlinelibrary.wiley.com/doi/10.1002/iid3.28/epdf –

0

sto usando questo codice:

WebSettings settings = webView.getSettings(); 
    settings.setLoadWithOverviewMode(true); 
    settings.setUseWideViewPort(true); 
    settings.setJavaScriptEnabled(true); 

    settings.setAppCacheEnabled(false); 
    settings.setCacheMode(WebSettings.LOAD_NO_CACHE); 
    settings.setDatabaseEnabled(false); 
    settings.setDomStorageEnabled(false); 
    settings.setGeolocationEnabled(false); 
    settings.setSaveFormData(false); 

spero che ti può aiutare.

+0

questo non funziona. –

+0

funziona come un incantesimo nel mio caso. . . –

0

Mi sono guardato intorno, prima per questo url: http://www.ajpmonline.org/article/S0749-3797(14)00628-X/fulltext sembra che stiano usando 'jwplayer' e penso che dal momento che WebView non l'ha gestito, lancia il browser 'reale'.

Questo codice ha lavorato per l'url sopra:

private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (Uri.parse(url).getHost().contains("secure.jbs") || Uri.parse(url).getHost().contains("ajpmonline")) 
      return false; 

     Log.d("MYWEBVIEWCLIENT", "This url couldn't not be handled by the webclient : " + Uri.parse(url).getHost()); 
     return true; 
    } 
} 

Sono d'accordo che non è il modo migliore per farlo. Non conosco lo scopo della tua WebView, puoi implementare il tuo WebView Client personalizzato se conosci già gli URL che verranno caricati all'interno.

Problemi correlati