2009-11-24 120 views
1

我正在编写一个Web应用程序,我想确定请求来自哪种类型的浏览器/操作系统,并相应地自定义返回的内容。因此,如果有人通过iPhone/Android访问该网站,他们会获得更加精简的体验,或者如果是台式机,则可以获得完整版本。我将采取完全不同的方式,而不是尝试将内容混合在一起。根据浏览器类型更改网页内容

在ASP.NET/IIS和PHP中对此进行推荐的方法是什么?是否有一个地方可以捕获传入的HTTP请求,做出决定,然后重定向?或者这是通常在一页一页的情况下完成的?我应该注意的任何陷阱?

编辑:好的一点是确保在缩小版上有一个完整版的链接。这是一个很好的观点,但会引发一个问题,即一旦用户做出选择,所有未来的重定向现在都必须指向完整版本。我宁愿在一个地方做所有这些。

干杯,

巴蒂尔

+0

如果由于某种原因导致浏览器检测失败,请确保您提供浏览完整版本的选项。 –

+0

当然。其实这提出了另一点。一旦有人做出该决定,来自该浏览器的所有请求都必须重定向到完整站点。我想知道这是如何完成的。 – Shane

回答

1

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

您可以从Request.Browser对象访问属性;您还可以根据浏览器细节标记控件属性。

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

+0

有趣。这听起来像是一种自动重定向方式,但您将如何处理用户选择查看完整版本页面的情况?现在,请求不会基于浏览器类型重定向,而是会话。 – Shane

+0

在.NET 3.5中,只需基于Request.Browser属性设置逻辑或是否设置了某个会话级别标志。在.NET 4.0中它更容易一些,因为它们增加了对浏览器确定方式进行完全程序控制的功能,而不是仅基于User-Agent字符串和正则表达式 - 所以您可以添加会话检查逻辑,然后可能仍然在标记中使用声明性属性。 – RickNZ

1

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

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

1

你可以看看在HTTP请求中的用户代理头,并相应地重定向。

在PHP中,这将是$_SERVER['HTTP_USER_AGENT']

但是你应该注意,当你这样做的时候你不会写很多重复的代码。

0

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