Android WebView有时会显示浏览器选择屏幕

时间:2012-07-30 16:44:00

标签: android webview android-webview

在创建我的活动时,我正在触发一个加载处理程序(虽然显示了一个微调器),其中包括在处理程序代码中我在三个私有WebView对象上调用loadURL。

这样做的目的是预先缓存这些网页,然后根据按钮触摸事件显示每个网页。实际的加载和显示工作正常,除了有时(看不到模式)我(或我的测试人员)无缘无故地获得浏览器选择屏幕(例如Chrome / Firefox)。

所以我的第一个问题是什么会导致这种情况,以及如何防止它发生?

否则你将如何执行以下操作:

  1. 预先缓存三个网页的结果(简单的HTML,表格等没有图像)。
  2. 依赖于按钮触摸显示屏幕布局中的网页结果(每次都是相同的布局,因此当触摸按钮2时,相应的网页会替换前一个网页。)

3 个答案:

答案 0 :(得分:1)

从不喜欢回答我自己的问题,但唯一的答案与问题无关。

似乎问题是由重定向引起的,正在加载的网页实际上没有重定向它,但服务器正在从子域执行内部重定向。我用以下代码解决了这个问题。

this.wvBasic.setWebViewClient(new WebViewClient() {
    private String pendingUrl;

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        if (pendingUrl == null) {
            pendingUrl = url;
        }
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        if (!url.equals(pendingUrl)) {
            Log.d(TAG, "Detected HTTP redirect " + pendingUrl + "->" + url);
            pendingUrl = null;
        }
    }
});
this.wvBasic.getSettings().setJavaScriptEnabled(false);

答案 1 :(得分:0)

这是完全正常的行为。您创建了intent,操作系统正在搜索具有正确intent-filter的活动来处理startActivity(intent)。由于有更多的应用程序可以处理您的意图(在您的情况下更多的浏览器),操作系统为您提供了从这些活动中进行选择的可能性。

现在,我检查了this个帖子,它似乎是您正在寻找的信息。根据{{​​3}},您可以retrieve a set of activities that should be presented to the user as similar options。如果您能够过滤这些活动,以便您的应用使用内置浏览器(保证在所有设备上安装),那么您就可以了。

答案 2 :(得分:0)

一个简单的解决方案是:

// Force links and redirects to open in the WebView instead of in a browser
mWebView.setWebViewClient(new WebViewClient());

来源:https://developer.chrome.com/multidevice/webview/gettingstarted