2017-06-27 4 views
1

Ich versuche ein Blog von WordPress auf Android WebView geladen zu laden. Während der Inhalt und die Titelbilder angezeigt werden, werden die Bilder in den Beiträgen (ich öffne einen Beitrag von der angezeigten Webseite) nicht angezeigt (der gesamte Text und sogar die Anzeigen werden angezeigt). Wenn Sie nur die Website im Webbrowser anzeigen, werden solche Probleme nicht angezeigt. Ich habe die Methoden, die in verschiedenen anderen Fragen in dieser Community vorgeschlagen wurden, ausprobiert, aber ähnliche Probleme konnten nicht gelöst werden.Ich kann Bilder in Posts in Android nicht sehen webview

Hier ist der Code

public class MainActivity extends AppCompatActivity { 

    private WebView webView; 
    private ProgressDialog mProgress; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     webView = (WebView) findViewById(R.id.cuous_web_view); 

     WebSettings webSettings = webView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setAllowContentAccess(true); 
     webSettings.setJavaScriptCanOpenWindowsAutomatically(true); 
     webSettings.setDomStorageEnabled(true); 
     webSettings.setLoadWithOverviewMode(true); 
     webSettings.setAppCacheEnabled(true); 
     webSettings.setAppCachePath(this.getApplicationContext(). 
         getCacheDir().getAbsolutePath()); 
     webSettings.setLoadsImagesAutomatically(true); 
     webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); 
     webSettings.setSupportZoom(true); 
     webSettings.setUserAgentString("Android WebView"); 
     mixedContentIfRequired(webSettings); 
     webSettings.setBuiltInZoomControls(true); 

     webView.setWebViewClient(new CuousViewClient()); 
     webView.setWebChromeClient(new CuousChromeClient()); 
     webView.loadUrl("http://cuous.com/"); 
    } 

    private void mixedContentIfRequired(WebSettings webSettings) { 
     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      webSettings.setMixedContentMode(WebSettings. 
         MIXED_CONTENT_COMPATIBILITY_MODE); 
     } 
    } 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if(keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) { 
      webView.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

    @Override 
    protected void onDestroy() { 
     if(mProgress != null && mProgress.isShowing()) 
      mProgress.dismiss(); 
     super.onDestroy(); 
    } 

    private class CuousChromeClient extends WebChromeClient { 

     @Override 
     public void onProgressChanged(WebView view, int progress) { 
      if (mProgress == null) { 
       mProgress = new ProgressDialog(MainActivity.this); 
       mProgress.show(); 
       mProgress.setCanceledOnTouchOutside(false); 
      } 
      mProgress.setMessage("Loading " + String.valueOf(progress) + "%"); 
      if (progress == 100) { 
       mProgress.dismiss(); 
       mProgress = null; 
      } 
     } 
    } 

    private class CuousViewClient extends WebViewClient { 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      ActionBar actionBar = getSupportActionBar(); 
      if(actionBar.isShowing()) { 
       actionBar.hide(); 
      } 
      super.onPageStarted(view, url, favicon); 
     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
      return true; 
     } 


     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      view.loadUrl("javascript:var footer = document.getElementById(\"footer\"); footer.parentNode.removeChild(footer);"); 
     } 

     @Override 
     public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { 
      if(handler != null) { 
       handler.proceed(); 
      } 
      else super.onReceivedSslError(view, null, error); 
     } 
    } 
} 

Antwort

0

Hallo Ich habe versucht, Ihren Link mit meinem Code. Ich kann die Bilder sehen: see the photo. Willst du das?

Dann ist, dass mein mainAcitivity:

import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 


public class MainActivity extends Activity { 

    private WebView view; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     view = (WebView) this.findViewById(R.id.webView); 
     view.getSettings().setJavaScriptEnabled(true); 
     view.getSettings().setDomStorageEnabled(true); 
     view.setWebViewClient(new MyBrowser()); 
     view.loadUrl("file:///android_asset/www/index.html"); //try js alert 
     view.setWebChromeClient(new WebChromeClient()); // adding js alert support 

    } 
    private class MyBrowser extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if (url.startsWith("tel:") || url.startsWith("sms:") || url.startsWith("smsto:") || url.startsWith("mailto:") || url.startsWith("mms:") || url.startsWith("mmsto:") || url.startsWith("market:")) { 
       Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
       startActivity(intent); 
       return true; 
      } 
      else { 
       view.loadUrl(url); 
       return true; 
      } 
     } 
    } 

    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && view.canGoBack()) { 
      view.goBack(); //method goback() 
      return true; 
     } 

     return super.onKeyDown(keyCode, event); 
    } 
} 

Kann auch fragen, was ist die minimale SDK-Version?

EDIT

This is what you want?

This is what also get

UPDATE_SHOULDURLOVERRIDING

Dies ist ein Stück Code, das sonst etwas tun wird, dann öffnen Sie einfach die URL in webview es davon steuert beginnt mit etwas wie mailto .... was ich bedeuten mit mailto: In HTML können Sie dies tun: [email protected] und auf Ihrem PC wird es Ihre Outlook öffnen. Wenn Sie Android haben und das Stück Code nicht da ist, wird es einen Fehler geben. Wenn Sie diesen Code haben, wird er fragen, in welcher Mailserivce ich ihn öffnen muss.

EDIT Also, wenn Sie es mit dieser Methode laden funktioniert es?

@Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 

statt:

 view.loadUrl("file:///android_asset/www/index.html"); //try js alert 
+0

Hallo @ Steven. Minimum SDK-Version ist SDK 19 (Android 4.4 glaube ich) weiter. Was den Screenshot angeht, habe ich mich nicht wirklich darauf bezogen. Vielleicht habe ich es in der Frage nicht richtig erklärt. Versuchen Sie, den Beitrag zu öffnen, in dem "Health Kart Affiliates" erwähnt wird. Ich habe mich auf die Bilder bezogen, die ich sehen sollte, wenn ich diesen Beitrag öffne. Übrigens könnten Sie auch erklären, was diese Zeilen innerhalb der 'if'-Anweisung in' shouldOverrideUrlLoading sind ' –

+0

Siehe Updates und Bearbeitungen – Steven

+0

Vielen Dank für die Erklärung dieses Bits in' shouldOverrideUrlLoading' und für die Screenshots (edit), ja, ich meinte das. Sie können die eingebetteten Bilder im Post im Webbrowser sehen aber aus irgendeinem Grund wird es nicht in der Webansicht angezeigt. –