从onpagefinished方法获取单个主机名

时间:2013-10-18 12:12:02

标签: android android-webview webviewclient

在SO和google上引用了很多文章之后,找不到我的问题的解决方案。

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

例如:当我打开bmw.com网站时,getHost()会返回www.bmw.com两次,而m.bmw.com会在同一个网页上返回三次。

尝试使用onPageStarted,但结果与此类似。

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

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

这是我的代码

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

1 个答案:

答案 0 :(得分:0)

见了几点意见:

  1. 您看到多个onPageFinished调用的原因很可能是重定向。
  2. 遗憾的是,您没有可靠的方法来确定重定向链何时结束(特别是在超时后出现JavaScript启动的重定向时)。
  3. 我不知道基于URL单独执行所需操作的可靠方法。考虑如何判断主机位是“my-app.appspot.com”或“2.my-app.appspot.com”?
  4. 浏览器也存在此问题 - 如果您转到执行几个重定向的页面,您会看到地址栏发生变化。
  5. 话虽如此,你可以做几件事:

    • 如果主机变化太频繁只是一个UI问题(也就是说 - 它看起来很糟糕)可能会限制更改(例如,不要让它更改每秒更改一次(不要忘记)使用最终/当前URL的最后一次更新))?
    • 拥有一组尽力而为的转化规则(例如"m.*" -> "www.*"),如果您这样做,我建议您为用户提供一些选项,以便查看“真正的”网址。