使用WebChromeClient阻止在外部浏览器中打开链接

时间:2017-03-30 01:45:13

标签: android android-studio

我开发了一小组.html页面,存储在服务器中。 我的Android应用程序使用webview: setWebChromeClient 加载这些页面。 minSdkVersion 19 targetSdkVersion 24

问题: 每次我需要加载新页面时,使用.html页面中的链接,新页面将在外部浏览器中打开。

网址覆盖 当我们使用setWebViewClient()时,我知道shouldOverrideUrlLoading()方法。 但不幸的是我不能使用正常的webview。我需要使用WebChromeClient(),因为某些功能只适用于此功能。 (与输入文件一样)

我怀疑是...... 如何覆盖我的URL以强制它们加载到webChromeClient中? 我试过这个但没有运气:

webView.setWebChromeClient(new WebChromeClient() {
        // (...)
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

    });

2 个答案:

答案 0 :(得分:1)

您可以使用以下代码来实现此目的。

WebView web = (WebView)findViewById(R.id.web);
WebSettings webSettings = web.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportMultipleWindows(true); // This forces ChromeClient enabled.    

web.setWebChromeClient(new WebChromeClient(){
    @Override
    public void onReceivedTitle(WebView view, String title) {
         getWindow().setTitle(title); //Set Activity tile to page title.
    }
});

web.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return false;
    }
});

答案 1 :(得分:0)

我在使用 WebChromeClient 类的 Android 应用程序中使用嵌入式移动网络应用程序,并且不想摆弄重新编译 APK。

在寻找最简单的 header(); 解决方案时(因为移动网络应用程序是在 php 中),我发现使用:

header("Location: url.php", TRUE, 307);

是一种无需重新编译 Android 应用的快速修复解决方案。

这允许用户在应用内重定向,而无需从我的应用外部调用网络浏览器。

Here 是 Arindam Nayak 的答案的链接,我从那里得到了这个想法。