2013-10-18 25 views
0

在引用了许多关于SO和google的文章后,找不到解决方案。从onpagefinished方法获取单个主机名

问题是,我在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); 
    } 

回答

0

拳一些观察:

  1. 你看到多个原因onPageFinished电话是最有可能的重定向。
  2. 不幸的是,您没有可靠的方式来确定重定向链何时结束(特别是在超时后发生JavaScript发起的重定向时)。
  3. 我不知道有一种可靠的方法可以根据URL来做你想做的事情。考虑如何决定主机位是“my-app.appspot.com”还是“2.my-app.appspot.com”?
  4. 浏览器也有这个问题 - 如果你去一个页面做几个重定向,你会看到地址栏的变化。

话虽这么说,有几件事情你可以做:

  • 如果主机改变过于频繁仅仅是一个UI的问题(也就是 - 它只是看起来坏)也许油门的变化(例如,不要让它每秒更改一次(不要忘记上次更新的最终/当前URL))?
  • 有一套尽力而为的转换规则(如"m.*" -> "www.*"),如果你这样做,我建议有一些选项让用户看到'真实'的URL。