【问题标题】:WebView.loadUrl() only works for every 2nd callWebView.loadUrl() 仅适用于每第二次调用
【发布时间】:2013-07-24 15:01:40
【问题描述】:

我有一个包含 WebView 的活动:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    webView = new WebView(this);
    setContentView(webView);
    webView.getSettings().setUserAgentString(MY_CLIENT);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.setWebViewClient(new MyWebViewClient());
}

我的活动定义了 2 个菜单项,这将导致加载 2 个不同的 URL URL1 和 URL2:

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_url1:
        webView.loadUrl(URL1);
        return true;
    case R.id.menu_url2:
        webView.loadUrl(URL2);
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

但是,只有在第二次选择相应的菜单项时才会加载 URL。在 MyWebViewClient.onPageStarted() 和 MyWebViewClient.onPageFinished() 中设置断点显示,在第一次点击时,onPageFinished() 被调用,但 url 没有加载到 WebView 中。在第 2 次单击时,调用 onPageStarted(),然后调用两次 onPageFinished(),并将 url 加载到 WebView 中。如果我随后尝试加载另一个 URL,则该过程会重新开始,并且需要再次单击两次。

我的目标 Android SDK 是 17,最小 SDK 是 8。我正在 Nexus 7 上进行测试。

我必须做些什么才能让 WebView 为第一次点击加载一个 URL?以及如何调试此类问题?

【问题讨论】:

  • 你好,也许你应该尝试关闭缓存:webView.getSettings().setAppCacheEnabled(false);请参阅有关缓存清除的此线程:stackoverflow.com/questions/2465432/…
  • 您好,谢谢,但我没有启用缓存(默认情况下禁用)。尽管如此,由于两个菜单项的 url 发生了变化,我可以使用相应页面的缓存版本(事实上,我计划稍后启用缓存),但是 WebView 在第一次单击时根本没有变化...

标签: android android-webview


【解决方案1】:

看起来问题与我正在尝试加载的 URL 有关 - 其​​他 URL 工作正常。因为对于我要加载的那些,我总是必须执行两次 loadURL() 调用,我现在只是在代码中完全这样做 - 奇怪的解决方法,但到目前为止有效。我必须查看 URL,我想...

【讨论】:

    【解决方案2】:

    尝试添加

    webView.reload();
    

    在你打电话之前

    webView.loadUrl(...);
    

    这个解决方案可以帮助我解决像你这样的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      相关资源
      最近更新 更多