首页 > 解决方案 > 如何在 Android 的 WebView 中的外部浏览器和应用内打开链接

问题描述

我正在尝试创建两个链接以在我的应用程序的 WebView 内部打开以及在任何默认浏览器中外部打开的其他链接。我已经看过以前的问题和答案,但似乎没有一个有效,我认为解决方案可能已经过时了?

任何关于如何最好地实现这一目标的建议将不胜感激。在应用程序中打开链接工作正常,它只是让链接在适用的外部浏览器中打开。也许某种类或 url 参数检查?到目前为止,我还没有设法让任何一个工作。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {
    private WebView myWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myWebView = (WebView) findViewById(R.id.webView);
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setDomStorageEnabled(true);
        myWebView.loadUrl("https://website.com/");
        myWebView.setWebViewClient(new WebViewClient());
    }

    @Override
    public void onBackPressed() {
        if (myWebView.canGoBack()) {
            myWebView.goBack();
        } else {
            super.onBackPressed();
        }
    }
}

标签: androidandroid-webview

解决方案


你可以这样做

webView.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if(wantToOpenExternal){
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse(url));
                    String title = "Select a browser";
                    Intent chooser = Intent.createChooser(intent, title);
                    startActivity(chooser);
                    return true;//cancel the current load
                }
                return false;//continue the current load
            }
        });

推荐阅读