我们正在建立一个适合移动设备的网站,与我们客户的MOSS 2007互联网网站协同工作。我们需要能够重定向访问主页并使用移动设备的用户。
我们的初衷是在主页页面布局中添加自定义控件,以检测当前用户的设备并相应地重定向到移动网站。我们很快意识到这不起作用,因为我们正在使用SharePoint / Asp.Net提供的输出缓存功能。这意味着检测代码仅针对主页的第一个访问者运行,直到缓存过期。
我们的下一个想法是构建一个自定义HTTP模块并在那里处理检测。但是,我们发现输出缓存也不允许这样做。如果在移动设备访问时设置了缓存,则随后将所有浏览器重定向到移动站点(直到缓存过期)。
如果我们关闭输出缓存它可以正常工作 - 但我们无法关闭输出缓存,特别是主页。我们确实调查了Substitution(Donut)缓存,但由于我们在另一个HTTP模块中过滤Asp.Net响应,因为XHTML兼容性原因整理了呈现的HTML,因此这不起作用。我还通过将其设置为“用户代理”的各种标题属性来尝试输出缓存配置文件,但我得到了混合结果,并且还关注缓存多页版本页面的内存含义(我们已经有了记忆问题偶尔)。
我们可以在JavaScript中运行重定向代码,但是我们可能无法检测到许多未启用JavaScript的设备。这是一个政府网站,因此JavaScript的使用必须遵守可访问性指南。
有没有人对我们如何解决这个问题有任何其他想法。有没有人这样做过?也许以不同的方式?
希望你能提供帮助,谢谢。
P.S。我也问了question on SharePoint.SE但是想尽可能多地关注这个问题。
答案 0 :(得分:2)
我建议你试试ISAPI filters
答案 1 :(得分:0)
我实际上已经解决了这个问题。我在这里几乎都遵循了这篇文章 - http://msdn.microsoft.com/en-us/library/ms550239.aspx。我们更新了该文章中的代码,以根据当前页面是否为主页,当前用户是否使用移动设备以及是否存在强制用户访问完整站点的cookie来构建缓存密钥。我可能会把它写成博客文章。当我这样做时,我将更新此答案,提供链接。