代码之家  ›  专栏  ›  技术社区  ›  Chris Marisic

是否可以禁用ASP.NET中的browserCaps功能?

  •  8
  • Chris Marisic  · 技术社区  · 14 年前

    是否可以禁用ASP.NET中的browserCaps功能?

    我希望我的网站能被可靠地服务,就像我为所有浏览器定义的那样,不管它们的功能如何。

    这是非常令人沮丧的时候,似乎有坏运气蜘蛛,我猜爬行的网站,得到较低版本的网站,导致输出缓存服务剥离文件。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Willem    14 年前

    您可以将ClientTarget=“uplevel”放在page指令或page.Init中

    <%@ Page ClientTarget="uplevel" ...... %>
    

    Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) _
            Handles Me.Init
        Page.ClientTarget = "uplevel"
    End Sub
    

    另一个选择是添加 .browser 文件到您的站点,在App_Browsers文件夹(默认的Asp.NET文件夹)中。它应该以所有具有正则表达式的浏览器为目标,并通过添加功能以某种方式禁用常规浏览器检测。在Safari中,我只是用这个来正确地呈现菜单控件,但我不知道如何一次完成所有输出。

        2
  •  3
  •   Svend    10 年前

    我现在正在尝试的一个疯狂的解决办法是注射我们自己的 HttpCapabilitiesDefaultProvider 它返回一个静态 HttpBrowserCapabilities . 那么诀窍就是始终返回相同的capabilities对象,所以通过调用 base.GetBrowserCapabilities 在使用IE9时,我们使用Newtonsoft创建了一个序列化,通过将这个字符串保存在源代码中,我们可以构建一个类似IE9的capabilities对象,而不管是哪个浏览器发起了请求。

    public class CustomerHttpCapabilitiesProvider : HttpCapabilitiesDefaultProvider
    {
        private const string m_IE9Definition = "{\r\n  \"$type\": \"System.Web.Mobile.MobileCapabilities, System.Web.Mobile\",\r\n  \"UseOptimizedCacheKey\":..... ";
        private readonly static Lazy<MobileCapabilities> m_Capabilities = new Lazy<MobileCapabilities>(() => JsonConvert.DeserializeObject<MobileCapabilities>(m_IE9Definition), true);
    
        public override HttpBrowserCapabilities GetBrowserCapabilities(HttpRequest request)
        {
            return m_Capabilities.Value;
        }
    }
    

    然后在 Application_Start

    HttpCapabilitiesBase.BrowserCapabilitiesProvider = new CustomerHttpCapabilitiesProvider();
    

    然而,这并没有经过真正的测试,不确定这一变化的确切影响是什么。

    推荐文章