1

在创建我的活动时,我正在触发一个加载处理程序(同时显示一个微调器),除此之外,在该处理程序代码中,我在三个私有 WebView 对象上调用 loadURL。

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

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

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

  1. 预缓存三个网页的结果(简单的 HTML、没有图像的表格等)。
  2. 依赖于按钮触摸显示网页的结果在屏幕上的布局(每次相同的布局,所以当按钮 2 被触摸时,它对应的网页会替换前一个)。
4

3 回答 3

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);
于 2012-09-02T11:41:15.667 回答
0

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

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

于 2012-07-30T16:55:34.787 回答
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

于 2018-11-27T13:00:54.010 回答