【问题标题】:Changing web content based on browser type根据浏览器类型更改网页内容
【发布时间】:2009-11-24 21:31:43
【问题描述】:

我正在编写一个 Web 应用程序,我想弄清楚请求来自什么类型的浏览器/操作系统,并相应地自定义返回的内容。因此,如果有人从 iPhone/Android 访问该网站,他们将获得更流畅的体验,或者如果是台式机,他们将获得完整版本。我几乎会采取完全不同的路径,而不是尝试将内容混合在一起。

在 ASP.NET/IIS 和 PHP 中推荐的方法是什么?是否有一个地方可以捕获传入的 HTTP 请求,做出决定,然后重定向?或者这通常是在逐页案例中完成的?有什么我应该注意的问题吗?

编辑:一个很好的观点是确保在精简版上有完整版的链接。这是一个很好的观点,但提出了一个问题,即一旦用户做出此选择,所有未来的重定向现在都必须指向完整版本。我真的宁愿在一个地方完成所有这些工作。

干杯,

肖恩

【问题讨论】:

  • 如果由于某种原因您的浏览器检测失败,请确保您让人们可以选择查看完整版本。
  • 当然。实际上,这提出了另一点。一旦有人做出决定,来自该浏览器的所有请求都必须重定向到整个站点。我想知道这是怎么做到的。

标签: php asp.net iis-7 browser


【解决方案1】:

ASP.NET 具有内置的浏览器检测机制。它由一个完全可扩展的 XML 文件 (*.browser) 集合驱动,其中包含用于匹配传入的 User-Agent 字符串和匹配代理的相关属性的正则表达式。

您可以从 Request.Browser 对象访问属性;您还可以根据浏览器的具体情况标记控件属性。

网上有很多关于这方面的信息——我也在我的书中详细介绍了它:Ultra-Fast ASP.NET

【讨论】:

  • 有趣。这听起来像是一种自动化的重定向方式,但是您将如何处理用户选择查看完整版页面的情况?现在请求不再基于浏览器类型重定向,而是基于会话。
  • 在 .NET 3.5 中,只需根据 Request.Browser 属性或是否设置了某些会话级标志来设置逻辑。在 .NET 4.0 中它更容易一些,因为他们增加了对浏览器的确定方式进行完全编程控制的能力,而不是仅基于 User-Agent 字符串和正则表达式 - 所以你可以添加你的那里的会话检查逻辑,然后可能仍然在您的标记中使用声明性属性。
【解决方案2】:

不是一个直接的答案,但值得一试 CSS 媒体类型。您可以指定手持类型以简化手机和其他小屏幕设备的页面。

http://www.w3.org/TR/CSS21/media.html

【讨论】:

    【解决方案3】:

    您可以查看 HTTP 请求中的 UserAgent 标头并进行相应的重定向。

    在 PHP 中是$_SERVER['HTTP_USER_AGENT']

    但是,您应该注意在执行此操作时不要编写大量重复代码。

    【讨论】:

      【解决方案4】:

      对于 ASP.NET 应用程序,您可以查看 Global.asax 文件和 Session_BeginRequest 事件。

      【讨论】:

        【解决方案5】:

        【讨论】:

        • 条件 cmets 仅在 Internet Explorer 中受支持,除了提供 IE-only 材料/hacks 之外,其他任何东西都毫无用处。我不认为他们适合这个。
        • @WaffleMatt 你有什么建议?
        猜你喜欢
        • 2014-11-07
        • 2013-12-03
        • 2013-06-26
        • 1970-01-01
        • 2013-06-07
        • 2013-01-06
        • 2013-03-02
        • 2014-01-22
        相关资源
        最近更新 更多