0

在参考了许多关于 SO 和 google 的文章后,找不到我的问题的解决方案。

问题是,我在 WebViewClient 类的 onPageFinished 方法中获取主机名。当 getHost() 多次返回主机名时出现问题。但我想有一个单一的主机名。

例如:当我打开 bmw.com 网站时,getHost() 会两次返回 www.bmw.com,并返回 m.bmw.com 三次。

尝试使用 onPageStarted,但结果相似。

甚至尝试 WebChromeClient 来获取标题,但不能依赖,因为有时它不会返回标题。

页面加载后有没有办法获得一个主机名?

这是我的代码

public void onPageFinished(WebView view, String url4){

        String urlHost = null;
        try {
            urlHost = new URL(url4).getHost().toString();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        addressBarTextView.setText(urlHost);
    }
4

1 回答 1

0

提出几点意见:

  1. 您看到多个 onPageFinished 调用的原因很可能是重定向。
  2. 不幸的是,没有一种可靠的方法可以让您确定重定向链何时结束(尤其是在超时后发生由 JavaScript 启动的重定向的情况下)。
  3. 我不知道仅根据 URL 来做你想做的事情的可靠方法。考虑一下您将如何决定“my-app.appspot.com”或“2.my-app.appspot.com”的主机位是什么?
  4. 浏览器也有这个问题——如果你去一个页面做了几个重定向,你会看到地址栏发生了变化。

话虽如此,您可以做几件事:

  • 如果主机更改过于频繁只是一个 UI 问题(也就是说 - 它看起来很糟糕)可能会限制更改(例如,不要让它每秒更改一次以上(不要忘记最后一次更新)带有最终/当前 URL))?
  • 拥有一组尽力而为的转换规则(如"m.*" -> "www.*"),如果您这样做,我建议您也有一些选项让用户也能看到“真实”的 URL。
于 2013-11-25T17:42:22.817 回答