2017-07-11 32 views
1

Androidスタジオでwebviewのページを表示するアプリケーションを作成していますが、同じWebviewでtarget = '_ blank'のページを開くことができません。 これはできますか?Webview android target = '_ blank'

現在、私はこれを持っています。現在、target = '_ blank'のリンクをクリックすると何も起こりません。 私がonCreateWindowを変更すると、リンクは外部ブラウザで開きますが、そのようなことは起こりたくありません。

私はそれを検索しようとしましたが、解決策を見つけることができません。

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方法変更の戻り値の型を作成します。 –

+0

shouldOverrideUrlLoadingをtrueに変更すると、白いページが表示されます。何もロードされません。 – Birger

答えて

0

これは、この1

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

me.Tryのために働いている真にプライベートクラス

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

これはチェックされているかどうかです。 –

+0

これはwebviewではなくブラウザを開いているようです。 – Birger

+0

私はラインのコメントを外さなければなりませんでした webView.setWebViewClient(new SSLTolerentWebViewClient()); これはカスタムWebviewクライアントですか? – Birger

関連する問題