【问题标题】:Problems loading mobile.twitter in webview在 web 视图中加载 mobile.twitter 时出现问题
【发布时间】:2011-10-14 23:15:59
【问题描述】:

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

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

我在想 Twitter 改变了他们的移动网站,因为这在一个月左右前还有效。还有其他人遇到这种情况吗?

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

【问题讨论】:

  • webview.getSettings().setJavaScriptEnabled(true);
  • 是的,这也发生在我们身上......但只有使用我们的 Nexus One,旧手机 (Magic) 似乎可以正常工作。
  • 我在 htc 的欲望和 nexus 上也有。
  • 是的,我们也有 htc 的愿望

标签: android twitter webview


【解决方案1】:

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

对于懒惰的点击者,我会在这里给出:

webView.getSettings().setDomStorageEnabled(true);

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

编码愉快!

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

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

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

所以再次不要更改用户代理,这对您的应用和网络健康非常不利。并且应该简单地禁止任何代码。谢谢:)

【讨论】:

  • 完美运行!感谢您的链接 =)
  • 我在这里遇到了问题。当我做 webView.getSettings().setDomStorageEnabled(true);然后第一次调用 twitter 的 loadURL,page is not loaded 。但是,如果我调用 webView.reload() 或再次加载 url,它会从那时起打开 twitter.com,直到我退出应用程序(或从设置中强制关闭)。再次从下一次重启开始,推特第一次没有加载。有人遇到过这个问题吗?
  • @AlokKulkarni 我看到第一次页面似乎已加载,但没有显示任何推文,仅显示 4 个不响应点击的列表项(关注者、关注者、收藏夹、列表)。刷新页面会显示预期的推文列表,在推文下方这些列表有效。我假设 mobile.twitter.com 的第一个视图被破坏了,但它成功地通过 DOM 存储设置了一些 html5 标志。
  • @AlokKulkarni 使用 iphone ua 代理在第一个视图上运行良好,没有 dom 存储设置。我正在为 twitter.com 添加一个条件。希望twitter以后能更好地支持android。
  • 好的,谢谢!设置用户代理和 DomStorageenabled 对我有用
【解决方案2】:

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

在这肮脏的黑客攻击之后需要洗手。

【讨论】:

  • 在这种情况下,用户将看到 Twitter iPhone 应用程序的链接。使用来自@chuckbjones 的方法。
【解决方案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 应用程序”之类的 iPhone 特定文本。

【讨论】:

    【解决方案4】:

    按照 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) {}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      相关资源
      最近更新 更多