代码之家  ›  专栏  ›  技术社区  ›  User210282

从onpagefinished方法获取单个主机名

  •  0
  • User210282  · 技术社区  · 12 年前

    在参考了SO和谷歌上的许多文章后,我找不到解决我问题的方法。

    问题是,我正在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);
        }
    
    1 回复  |  直到 12 年前
        1
  •  0
  •   marcin.kosiba    12 年前

    首先进行几个观察:

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

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

    • 如果主机更改过于频繁只是UI问题(也就是说,它看起来很糟糕),那么可能会限制更改(例如,不允许其更改频率超过每秒一次(不要忘记最后一次更新的最终/当前URL))?
    • 制定一套尽力而为的转换规则(如 "m.*" -> "www.*" ),如果你这样做,我建议用户也可以选择查看“真实”URL。