当我尝试在Webview中加载以下网址时,我得到的是带有加载微调器的黑色推特背景。在调用WebViewClient.onPageFinished
时加载页面。但是,在标准Android浏览器中页面加载正常。
https://twitter.com/#!/scottyab or https://mobile.twitter.com/#!/scottyab
我认为Twitter已经改变了他们的移动网站,因为这已经工作了一个月左右。有没有其他人经历过这个?
已更新:启用了javascript mWebView.getSettings().setJavaScriptEnabled(true);
答案 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) {}