手机加载问题.webview中的Twitter



当我尝试在Webview中加载以下url时,我得到的是黑色twitter背景与加载微调器。当WebViewClient.onPageFinished被调用时,页面被加载。然而,在标准的Android浏览器中,页面加载正常。

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

我认为Twitter在一个月前改变了他们的移动网站。还有人有这样的经历吗?

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

这些确实是肮脏的手段。更改用户代理确实是一个令人讨厌的解决方案,不应该使用。当在webview中加载twitter.com时,你最好试试下面的代码:https://stackoverflow.com/a/6625418/162178

对于惰性点击器,我在这里给出:

webView.getSettings().setDomStorageEnabled(true);

所有的功劳都归功于gregm,他给出了这个:)

快乐编码!

Edit:只是一个小小的更新来证明这个选择,用户代理意味着给访问的站点关于谁是客户端的信息。如果有一天Twitter对Android做出了特殊的改变,他们肯定会使用用户代理来实现这一目标。如果你告诉他们你的是iPhone或其他设备你可能永远不会被重定向或者更简单地说永远不会得到专门为Android设计的css。

在一个更政治的问题上,如果每个人都改变它的用户代理,网站统计将是错误的,他们可能永远不会看到有很多android来到他们的网站。^ ^(也许可以考虑对他们的网站进行适当的更新)。这一切不仅仅是为Twitter网络客户端准备的。所以要对人好一点。

Benjamin的回答似乎很好(使用Java的反射使其向后兼容,如果我是正确的)

所以不要改变用户代理,这对你的应用程序和网络健康非常不利。并且应该被禁止出现在任何代码中。谢谢:)

通过将用户代理硬编码到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");

在这之后我要洗手了。

比使用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应用程序"。

在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) {}

最新更新