在webview中加载mobile.twitter的问题

时间:2011-07-28 09:32:04

标签: android twitter webview

当我尝试在Webview中加载以下网址时,我得到的是带有加载微调器的黑色推特背景。在调用WebViewClient.onPageFinished时加载页面。但是,在标准Android浏览器中页面加载正常。

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

我认为Twitter已经改变了他们的移动网站,因为这已经工作了一个月左右。有没有其他人经历过这个?

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

4 个答案:

答案 0 :(得分:19)

那些确实是肮脏的黑客。更改用户代理实际上是一个讨厌的解决方案,应该从不完成。在webview中加载twitter.com时,您最好尝试在那里给出的代码: https://stackoverflow.com/a/6625418/162178

对于懒惰的答题器,我会在这里给出:

webView.getSettings().setDomStorageEnabled(true);

所有学分归gregm所有,他们给了这个:)

快乐的编码!

编辑:只需稍加更新即可证明此选择,用户代理旨在为访问过的网站提供有关客户的信息。 如果有一天Twitter专门针对Android进行了特殊更改,他们肯定会使用用户代理来实现这一目标。 如果你告诉他们你的iPhone或任何你可能永远不会被重定向的东西,或者更简单地永远不会获得专门用于Android的css。

在一个更具政治性的问题上,如果每个人都改变它的用户代理,那么网站统计数据就会出错,他们可能永远不会看到有很多Androids进入他们的网站。 ^^ (或许可以考虑对他们的网站进行适当的更新)。而这整件事不仅仅适用于Twitter网络客户端。好的。

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

因此,再次不要更改用户代理,这对您的应用和网络运行状况非常不利。应该简单地禁止任何代码。谢谢:))

答案 1 :(得分: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");

这是一个肮脏的黑客之后需要洗手。

答案 2 :(得分: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的特定文字,例如“为iPhone下载新的Twitter应用程序”。

答案 3 :(得分: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) {}