android - Webview android目标='_blank'

标签 android html webview android-webview

我正在 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;
    }
}

最佳答案

这对我有用。试试这个

 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)

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

关于android - Webview android目标='_blank',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45034449/

相关文章:

android - 如何仅在应用程序首次启动时启动具有特定 Activity 的应用程序?

html - 如何显示图像代替div

android - 用于重定向 href 链接的 android webview backkey 中的死循环

java - 为什么 finish() 不立即退出处理?

java - 如何避免重复的随机数并在android中选择另一个随机数?

java - 在 onCreate 中初始化变量,但在 onResume() 中更新它们

html - 可见区域标签?

javascript - 如果选中 radio1 则显示 div1,如果选中 radio2 则显示 div2

android - Google 登录但结果代码为 0

Javascript注入(inject)到webview