java - WebView 打开网站中的链接

标签 java android webview

我正在尝试制作一个 Android 应用程序来使用 WebView 加载网站,但问题是在网站中我有不同的链接。问题是我想在外部浏览器中打开一些链接,并在同一窗口中打开一些链接。

例如,如果链接以“.html”结尾,则在同一窗口中打开,而其他链接则在外部窗口中打开。我应该在以下代码的 else 分支中插入什么?

public class MainActivity extends AppCompatActivity {
private WebView myWebView;
String url = "url";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myWebView = (WebView) findViewById(R.id.web1);
    // Configure related browser settings
    myWebView.getSettings().setLoadsImagesAutomatically(true);
    myWebView.getSettings().setJavaScriptEnabled(true);
    myWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
    // Configure the client to use when opening URLs
    // Load the initial URL
    myWebView.loadUrl("url");
    myWebView.setWebViewClient(new WebViewClient() {
        // Api < 24
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url != null && url.endsWith(".html")) {
                view.loadUrl(url);
                return true;
            } else {
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                return true;
            }
        }
    });
}

}

最佳答案

此方法在 API 级别 24 中已弃用。

boolean shouldOverrideUrlLoading (WebView view, String url)

对于 Api > 24 可以使用

boolean shouldOverrideUrlLoading (WebView view,WebResourceRequest request)

这是在应用程序中使用这两种方法的示例

    webView.setWebViewClient(new WebViewClient(){
// Api < 24
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url != null && url.endsWith(".html")) {
                    view.loadUrl(url);
                    return true;
                } else {
                    startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(url)));
                    return true;
                }
            }
// Api > 24
            @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                if (request.getUrl().toString() != null && request.getUrl().toString().endsWith(".html")) {
                    view.loadUrl(request.getUrl().toString());
                    return true;
                } else {
                    startActivity(new Intent(Intent.ACTION_VIEW,request.getUrl()));
                    return true;
                }
            }
        });
        webView.loadUrl("https://google.com");

关于java - WebView 打开网站中的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48287553/

相关文章:

java - 替换字符串上的空格并使用 toCharArray() 打破它们似乎不起作用

java - 您可以动态创建对 JCheckBox 对象的引用吗?

android 从广播接收器获取偏好

Android Activity 服务通信

java - Google meet、zoom 或 vetera 无法与 android webview 一起使用

ios - webView:didFailLoadWithError -1004: 在 Phonegap ios 中连接 google plus 时无法连接到服务器

java - 如何在java中使用JSlider放大和缩小行中的图像?

java - 单元测试多个连续的键盘输入

android - Android 中的 Google map 不会调用 onClusterItemInfoWindowClick

android - 使用 Android 4.4 WebViews 进行远程 webkit 调试