2011-07-28 121 views
11

加载mobile.twitter当我尝试加载以下URL的网页视图所有我得到的是黑色的叽叽喳喳的背景负荷微调。页面被加载,因为WebViewClient.onPageFinished被调用。但是,在标准的Android浏览器中,页面可以正常加载。问题的WebView

https://twitter.com/#!/scottyab or https://mobile.twitter.com/#!/scottyab 

我想微博改变了他们的移动网站,因为这工作了一个月前。任何人遇到这个?

更新:启用javascript mWebView.getSettings().setJavaScriptEnabled(true);

+2

没错这就是happenning对我们来说太......但是,只有我们的Nexus One的,旧的手机(魔术)似乎工作正常。 – Sirs

+2

我也在htc愿望和nexus s上。 – scottyab

+0

是的,我们也有htc的愿望 – pchap10k

回答

15

通过硬编码的用户代理iPhone的用户代理修正了加载问题(我发现它制作的iPhone版应用程序)

mWebView.getSettings().setUserAgentString("Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3"); 

需要洗我的在这之后,一个肮脏的黑客手中。

+4

这很丑,但它对我们也很有用。 – Sirs

+2

在这种情况下,用户将看到Twitter iPhone应用程序的链接。使用@chuckbjones的方法。 – FeelGood

14

略比使用iPhone的用户代理不太脏,我能得到这个使用OG Droid的用户代理字符串的工作:

webView.getSettings().setUserAgentString("Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17"); 

这样,你没有得到像“下载iPhone特定文本新的Twitter应用程序的iPhone“在页面上。

+3

工程就像一个魅力,感谢您的帮助。 – taf

19

那些确实是肮脏的黑客。更改用户代理确实是一个讨厌的解决方案,并应永远来完成。当在web视图加载twitter.com,你最好尝试给那里的一段代码: https://stackoverflow.com/a/6625418/162178

对于懒惰的表决我会在这里给它:

webView.getSettings().setDomStorageEnabled(true); 

所有学分去gregm,是谁给了这一个:)

编码愉快!

编辑:只需稍作更新以证明这一选择,用户代理就是为访问网站提供有关谁是客户的信息。 如果有一天Twitter做出专门针对Android的特殊更改,他们肯定会使用用户代理来实现这一点。 如果你告诉他们你的iPhone或任何你可能永远不会重定向或更简单的事情,永远不要得到特别为Android设计的CSS。

和更政治问题,如果每个人都改变了它的用户代理,网站的统计将是错误的,他们可能永远也看不到有来他们的网站有很多机器人会的。 ^^ (可能考虑让适当的更新到他们的网站)。这整个事情不仅仅是Twitter的网络客户端。所以很好。

本杰明的答案here似乎相当不错(使用Java的反射,使之向后兼容,如果我是正确的)

再次这样做不会改变用户代理是为您的应用程序和Web运行状况非常糟糕。应该简单地禁止任何代码。谢谢:)

+0

工作完美!感谢您的链接=) – Alesqui

+0

我在这里面临一个问题。当我做webView.getSettings()。setDomStorageEnabled(true); ,然后首次调用loadURL for twitter,页面没有加载。但是,如果我再次调用webView.reload()或加载URL,它会从此开始twitter.com,直到我退出应用程序(或强制关闭设置)。再次从下次重新启动,第一次没有加载twitter。有没有人遇到过这个问题? –

+0

@AlokKulkarni我看到第一次加载的页面,但没有显示任何tweats,只显示了4个不响应点击的列表项(跟随,关注者,收藏夹,列表)。刷新页面显示预期的推文列表,并在推文列表下面显示这些列表的工作。我认为mobile.twitter.com在第一个视图中被打破了,但是它通过DOM存储设置了一些html5标志。 – larham1

2

继MrBUBBLs回答,这样的事情应该这样做,而解决问题的Twitter管理向后兼容性:

// Hack to let mobile twitter work. From API 7 (Android 2.1) only 
try { 
    Method m = WebSettings.class.getMethod("setDomStorageEnabled", new Class[]{boolean.class}); 
    m.invoke(mWebView.getSettings(), true); 
} 
catch (SecurityException e) {} 
catch (NoSuchMethodException e) {} 
catch (IllegalArgumentException e) {} 
catch (IllegalAccessException e) {} 
catch (InvocationTargetException e) {}