android - 使用 WebChromeClient 防止在外部浏览器中打开链接

标签 android android-studio

我开发了一组存储在服务器中的 .html 页面。 我的 android 应用程序使用带有以下内容的 WebView :setWebChromeClient 加载这些页面。 minSdkVersion 19 targetSdk版本24

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

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

我的疑问是... 如何覆盖我的 URL 以强制它们加载到 webChromeClient 中? 我试过了,但没有成功:

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

    });

最佳答案

您可以使用以下代码来实现这一点。

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

关于android - 使用 WebChromeClient 防止在外部浏览器中打开链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43107070/

相关文章:

java - 从字符串中获取标记之间的字符串

android - 错误 : No Retrofit annotation found.(参数 #2)

预览自定义 View 中的 Android ResourceNotFoundException

android - 处理程序延迟 60 秒不工作?

android - Android Studio 中的 Firebase android jars 文档/javadoc

android - APK 扩展文件 : Specifying library path in Android Studio (Windows)

android - SurfaceView 崩溃

android - 在 Intent 中传递 Activity 之间的接口(interface) - 接口(interface)无法序列化或可打包

macos - 如何在 Mac os 上的 Android Studio 中提供 Flutter SDK 路径,如何在 MACOS 中更新 Flutter SDK 路径?

android - Android Studio 中库的 NoClassDefFoundError