Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在webview中加载mobile.twitter时出现问题_Android_Twitter_Webview - Fatal编程技术网

Android 在webview中加载mobile.twitter时出现问题

Android 在webview中加载mobile.twitter时出现问题,android,twitter,webview,Android,Twitter,Webview,当我尝试在Webview中加载以下URL时,我得到的只是带有加载微调器的黑色twitter背景。页面以WebViewClient的形式加载。调用onPageFinished。但是,页面在标准Android浏览器中加载正常 https://twitter.com/#!/scottyab or https://mobile.twitter.com/#!/scottyab 我认为Twitter在一个月前改变了他们的移动网站。还有其他人经历过吗 更新:启用javascriptmWebView.getS

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

https://twitter.com/#!/scottyab or https://mobile.twitter.com/#!/scottyab
我认为Twitter在一个月前改变了他们的移动网站。还有其他人经历过吗


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

通过将用户代理硬编码到iPhone的用户代理,修复了加载问题(我发现它在iPhone版本的应用程序上工作)


这是一次肮脏的黑客攻击之后,我需要洗手。

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

这些确实是肮脏的黑客行为。更改用户代理确实是一个令人讨厌的解决方案,永远不应该这样做。在Web视图中加载twitter.com时,您最好尝试下面给出的代码:

对于懒惰的点击器,我将在这里给出:

webView.getSettings().setDomStorageEnabled(true);
所有的功劳都归格雷格姆,他给了这个:)

快乐编码

编辑:只是一个小小的更新,为了证明这一选择的正确性,用户代理旨在向访问过的站点提供有关谁是客户的信息。 如果有一天Twitter专门为Android做了特殊的改变,他们肯定会使用用户代理来实现这一点。 如果你告诉他们你的手机是iPhone或者其他什么,你可能永远不会被重定向,或者更简单地说,永远不会得到专门为Android设计的css

在一个更具政治性的问题上,如果每个人都改变了它的用户代理,那么网站统计数据将是错误的,他们可能永远不会看到有很多机器人进入他们的网站^^ (可能会考虑对他们的网站进行适当的更新)。而这一切不仅仅适用于Twitter网络客户端。所以要友善

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


因此,再次不要更改用户代理,这对您的应用程序和web健康非常有害。而且应该被禁止使用任何代码。谢谢:)

下面是Bubbls先生的答案,类似的方法可以在解决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) {}

webview.getSettings().setJavaScriptEnabled(true);是的,这对我们来说也是件好事。。。但只有在我们的NexusOne上,一款旧款手机(Magic)似乎运行良好。我在htc desire和NexusS上也有它。是的,我们在htc Desides上有它。在这种情况下,用户将看到Twitter iPhone应用程序的链接。使用@chuckbjones.的方法,效果非常好!谢谢链接=)我在这里面临一个问题。当我执行webView.getSettings().setDomStorageEnabled(true)时;然后第一次调用loadURL for twitter,页面未加载。但如果我调用webView.reload()或再次加载url,它会从那时起打开twitter.com,直到我退出应用程序(或强制关闭设置)。再次从下一次重启开始,twitter第一次没有加载。有人遇到过这个问题吗?@AlokKulkarni我看到第一次加载的页面似乎是加载的,但没有显示tweats,只显示了4个列表项(Following、Followers、Favorites、list),它们对单击没有响应。刷新页面将显示预期的tweet列表,在tweet下面,这些列表将起作用。我假设mobile.twitter.com在第一个视图中被破坏了,但是它通过DOM存储成功地设置了一些html5标志。@AlokKulkarni使用iphone ua代理在第一个视图中运行良好,没有DOM存储设置。我正在为twitter.com添加一个条件。希望twitter将来更好地支持android。好的,谢谢!将用户代理与DomStorageenabled一起设置对我来说是个好办法
// 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) {}