【问题标题】:What are the drawbacks to setting Page.ClientTarget = "uplevel" for all pages?为所有页面设置 Page.ClientTarget = "uplevel" 有什么缺点?
【发布时间】:2011-10-29 04:42:16
【问题描述】:

我们最近遇到了一些问题,因为自 Firefox 4 发布以来,ScrollPosition 数据从未发送给 Firefox 用户。这是因为 browsercaps 文件只指定了 Firefox 3.x 的功能。解决此问题的一种方法是更新每台服务器上的 browsercaps 文件,并在任何时候发布新版本的 Firefox(或 Chrome,或其他)。好吧,在我们甚至有机会解决这个问题之前,我们已经在 Firefox 6 上,这似乎是一场我们不想继续进行的比赛。

事实证明,在母版页中设置 Page.ClientTarget = "uplevel"(因此,对于所有内容,无条件地)修复了我们特定的 Firefox ScrollPosition 问题。作为解决方案,这会产生什么负面影响? Android 浏览器的用户体验会更差吗?他们现在只是要下载不必要的大页面吗?我们有什么理由不应该这样做吗?

Page.ClientTarget 的文档非常可怕:

uplevel ,它指定与 Internet 等效的浏览器功能 资源管理器 6.0。

.. 似乎是错误的,或者至少是误导性的。似乎它是在 IE6 是最强大的浏览器时编写的。 “uplevel”真的意味着“假设浏览器无所不能”还是“像对待 IE6 一样对待它”?

【问题讨论】:

  • firefox 当前版本为 6.0。检查此问题是否仍然存在
  • 是的,它仍然存在。除了将其版本号改回小于 4 之外,Firefox 无法解决此问题。browsercaps 文件(我们从未接触过)仅将 4 之前的 Firefox 版本指定为高级浏览器。
  • +1 用于古董 MSDN 链接。他们真的应该更新一下。

标签: asp.net cross-browser


【解决方案1】:

这不是对“有什么缺点”问题的回答,而是:

您可以在 browsercaps 文件中的浏览器版本检测中使用正则表达式。

例如,2011 年 11 月 13 日,Microsoft 发布了 ASP.NET 4.0 更新,将 IE10 添加到了高级列表中(并修复了位于 \Windows\Microsoft.NET\Framework\v4.0.30319\Config\Browsersie.browser 文件中的错误)。他们有一个正则表达式,只检查一位数的主要版本,但在补丁之后,任何 IE 版本 >= 6 都将被视为上一级。

改动前:

<capability name="majorversion" match="[6-9]" />

改动后:

<capability name="majorversion" match="[6-9]|[1-9]\d+" />

我猜你不会再遇到这个问题了,因为至少在 2011 年 10 月 26 日,firefox 指令还使用正则表达式来检测高级版本 >= 3:(来自 firefox.browser 文件)

<browser id="Firefox3" parentID="Firefox">
    <identification>
        <capability name="majorversion" match="^[3-9]|[1-9]\d+" />
    </identification>

    <capabilities>
        <capability name="javascriptversion"               value="1.8" />
        <capability name="supportsMaintainScrollPositionOnPostback" value="true" />
    </capabilities>
</browser>

但如果您仍有问题,只需在 firefox.browser 文件中使用具有前瞻性的正则表达式(没有像早期补丁中那样的“个位数主要版本”错误)

【讨论】:

    【解决方案2】:

    如果您想告诉 WebForms 有效地“下岗”,那么设置 Uplevel 是可行的,尽管您想在比母版页更早的 Page_Init 中进行设置。此时,WebForms 将假定每个人都是比您自己的浏览器更新的浏览器。

    【讨论】:

      【解决方案3】:

      对于无法测试浏览器实际限制的服务器端兼容性,我更喜欢使用黑名单而不是白名单:如果不知道浏览器支持功能 X,那么我假设它支持它。

      您还可以将所有版本的浏览器列入黑名单,例如没有任何版本的 IE 支持功能 X)。这需要您在 IE 确实支持功能 X 后更新黑名单。

      浏览器升级不应破坏此方案。

      【讨论】:

      • 你用什么机制来实现你的黑名单?
      • 有哪些您为黑名单中的某些浏览器明确禁用的功能示例?启用这些功能会有什么后果?
      猜你喜欢
      • 2017-03-19
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多