【问题标题】:Webview android target='_blank'Webview android 目标='_blank'
【发布时间】:2017-12-15 12:14:58
【问题描述】:

我正在 Android Studio 中构建一个在 webview 中显示页面的应用程序,但我似乎无法让 webview 在同一个 webview 中打开 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;
    }
}

【问题讨论】:

  • shouldOverrideUrlLoading 方法将返回类型更改为 true;
  • 如果我将 shouldOverrideUrlLoading 更改为 true,我只会得到一个白页.. 没有加载

标签: android html webview android-webview


【解决方案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);

创建私有类

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

【讨论】:

  • 你检查过这个吗?
  • 这似乎打开了浏览器而不是 web 视图。
  • 我不得不取消注释 webView.setWebViewClient(new SSLTolerentWebViewClient());那是自定义 webview 客户端吗?
  • 嘿.. 你能给我 SSLTolerentWebViewClient 的代码还是告诉我你在课堂上覆盖了什么?
  • SSLTolerentWebViewClient 添加了你检查了吗?
猜你喜欢
  • 1970-01-01
  • 2013-02-28
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 2012-05-08
  • 1970-01-01
相关资源
最近更新 更多