2017-07-11 5 views
1

Ich baue eine App in Android Studio, die eine Seite in einer Webansicht zeigt, aber ich kann nicht scheinen, die Webansicht zu öffnen Seiten mit target = '_ blank' in der gleichen Webansicht . Kann dies getan werden?Webview android target = '_ blank'

Derzeit habe ich das. Wie es jetzt passiert passiert nichts, wenn ich auf einen Link mit target = '_ blank' klicke Wenn ich mein onCreateWindow ändere, öffne ich den Link in einem externen Browser, aber das soll nicht passieren.

Ich habe es googeln versucht, kann aber keine Lösung finden.

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

    myWebView = (WebView) findViewById(R.id.myWebView); 
    myWebView.loadUrl("http://test.dk"); 
    myWebView.setWebViewClient(new MyWebViewClient()); 
    WebSettings webSettings = myWebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setDomStorageEnabled(true); 
    webSettings.setSupportMultipleWindows(true); 

    myWebView.setWebChromeClient(new WebChromeClient() { 
     @Override 
     public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, android.os.Message resultMsg) 
     { 

      WebView.HitTestResult result = view.getHitTestResult(); 
      String data = result.getExtra(); 
      //Context context = view.getContext(); 
      //Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(data)); 
      //context.startActivity(browserIntent); // opens in external browser 
      myWebView.loadUrl(data); //don't work! 
      return false; 
     } 
    }); 

} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (event.getAction() == KeyEvent.ACTION_DOWN) { 
     switch (keyCode) { 
      case KeyEvent.KEYCODE_BACK: 
       if (myWebView.canGoBack()) { 
        myWebView.goBack(); 
       } else { 
        finish(); 
       } 
       return true; 
     } 

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

// Use When the user clicks a link from a web page in your WebView 
private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 

     return false; 
    } 
} 
+0

shouldOverrideUrlLoading Methode ändern Rückgabetyp auf true private Klasse schaffen; –

+0

Wenn ich shallOverrideUrlLoading zu True ändern, bekomme ich nur eine weiße Seite .. Nichts lädt – Birger

Antwort

0

Dies wird dies ein

für me.Try arbeitete
webView = (WebView) findViewById(R.id.career_view); 
      URL = "http://test.dk/"; 
      webView.getSettings().setJavaScriptEnabled(true); 
      webView.loadUrl(URL); // Specify the URL to load when the application starts 
      webView.setWebChromeClient(new WebChromeClient(){ 
       public void onProgressChanged(WebView view, int progress) 
       { 
        //Make the bar disappear after URL is loaded, and changes string to Loading... 
        setTitle("Loading..."); 
        setProgress(progress * 100); //Make the bar disappear after URL is loaded 
        // Return the app name after finish loading 
        if(progress == 70) 
         setTitle(R.string.app_name); 
       } 
      }); 
      webView.setWebViewClient(new SSLTolerentWebViewClient()); 
      webView.getSettings().setLoadsImagesAutomatically(true); 
      webView.getSettings().setAllowFileAccess(true); 
      webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 
      webView.setInitialScale(1); // Set the initial zoom scale 
      webView.getSettings().setBuiltInZoomControls(true); // Initialize zoom controls for your WebView component 
      webView.getSettings().setUseWideViewPort(true); 

private class SSLTolerentWebViewClient extends WebViewClient { 
     public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) { 

      AlertDialog.Builder builder = new AlertDialog.Builder(Activities.this); 
      AlertDialog alertDialog = builder.create(); 
      String message = "SSL Certificate error."; 
      switch (error.getPrimaryError()) { 
       case SslError.SSL_UNTRUSTED: 
        message = "The certificate authority is not trusted."; 
        break; 
       case SslError.SSL_EXPIRED: 
        message = "The certificate has expired."; 
        break; 
       case SslError.SSL_IDMISMATCH: 
        message = "The certificate Hostname mismatch."; 
        break; 
       case SslError.SSL_NOTYETVALID: 
        message = "The certificate is not yet valid."; 
        break; 
      } 

      message += " Do you want to continue anyway?"; 
      alertDialog.setTitle("SSL Certificate Error"); 
      alertDialog.setMessage(message); 
      alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        // Ignore SSL certificate errors 
        handler.proceed(); 
       } 
      }); 

      alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 

        handler.cancel(); 
       } 
      }); 
      alertDialog.show(); 
     } 
    } 
+0

Sind Sie dies überprüft oder nicht. –

+0

Dies scheint ein Browser anstelle der Webansicht zu öffnen. – Birger

+0

Ich musste die Zeile auskommentieren webView.setWebViewClient (new SSLTolerentWebViewClient()); Ist das ein benutzerdefinierter Webview-Client? – Birger

Verwandte Themen