5

我正在跟踪 ASP.NET WebForms 项目中的一些交叉兼容性问题,并且遇到了一些特殊的行为。用不同的浏览器访问同一个页面会产生不同的结果,这种情况经常发生。对这种情况感到好奇的是,当我在不同的浏览器中查看源代码时,它会向我显示不同的 html。

IE 10:

<td id="ctl00_MainMenu-menuItem010" onclick="javascript:skm_closeSubMenus(document.getElementById('ctl00_MainMenu'));location.href='../Nurse/nurses_patients.aspx';" onmouseover="javascript:skm_mousedOverMenu('ctl00_MainMenu',this, document.getElementById('ctl00_MainMenu'), false, '');skm_shimSetVisibility(true,'ctl00_MainMenu-menuItem010-subMenu');" onmouseout="javascript:skm_mousedOutMenu('ctl00_MainMenu', this, '');this.className='';" style="cursor:hand;"><font face="Verdana"><b>Patients</b></font></td>

法郎:

<td id="ctl00_MainMenu-menuItem010" onclick="javascript:skm_closeSubMenus(document.getElementById('ctl00_MainMenu'));location.href='../Nurse/nurses_patients.aspx';" onmouseover="javascript:skm_mousedOverMenu('ctl00_MainMenu',this, document.getElementById('ctl00_MainMenu'), false, '');" onmouseout="javascript:skm_mousedOutMenu('ctl00_MainMenu', this, '');this.className='';" style="cursor:pointer;">Patients</td>

铬合金:

<td id="ctl00_MainMenu-menuItem010" onclick="javascript:skm_closeSubMenus(document.getElementById('ctl00_MainMenu'));location.href='../Nurse/nurses_patients.aspx';" onmouseover="javascript:skm_mousedOverMenu('ctl00_MainMenu',this, document.getElementById('ctl00_MainMenu'), false, '');" onmouseout="javascript:skm_mousedOutMenu('ctl00_MainMenu', this, '');this.className='';" style="cursor:pointer;">Patients</td>

注意 IE 版本中额外的 <font> 和 <b> 标签。这是我正在维护的旧应用程序。它使用 skm Menu 控件,并且在控件的属性中明确设置了粗体和 Verdana 字体。

<SKM:menu id="MainMenu" runat="server" Cursor="Pointer" ItemPadding="7" Font-Bold="True" Font-Size="12px" 
                            Font-Names="Verdana" ItemSpacing="0" BorderColor="Black" BorderWidth="1px" BorderStyle="solid" GridLines="Both"
                            BackColor="silver" Layout="Horizontal">
                            <SelectedMenuItemStyle ForeColor="Red" BackColor="White" />
                     </SKM:menu>

更让我困惑的是,这是我们在使用 IE9 的 View Source 中看到的 html:

<td id="ctl00_MainMenu-menuItem010" onclick="javascript:skm_closeSubMenus(document.getElementById('ctl00_MainMenu'));location.href='../Nurse/nurses_patients.aspx';" onmouseover="javascript:skm_mousedOverMenu('ctl00_MainMenu',this, document.getElementById('ctl00_MainMenu'), false, '');skm_shimSetVisibility(true,'ctl00_MainMenu-menuItem010-subMenu');" onmouseout="javascript:skm_mousedOutMenu('ctl00_MainMenu', this, '');this.className='';" style="cursor:hand;">Patients</td>

我正在尝试追踪服务器是否基于 UserAgent 呈现不同的 html,或者浏览器是否试图通过即时更改并在查看源代码时显示“清理”版本来变得聪明。希望这不是两者的结合。

编辑:在我将主机从 Win2k3 服务器迁移到 Win2k3 R2 服务器之前,我(或者更确切地说是客户)没有注意到这一点。如果我从 IE10 访问 R2 服务器,我会得到那些额外的标签。如果我从 IE10 访问非 R2 服务器,我不会得到这些标签。完全相同的代码和 IIS6。

4

2 回答 2

4

ASP.NET 控件可能会针对不同的浏览器发出不同的 HTML,尤其是不同版本的 IE。他们将尝试根据检测到的浏览器功能(脚本支持、CSS 支持等)来执行此操作。

较旧的 ASP.NET 应用程序(之前的 .NET 4.5)不了解现代浏览器(例如 IE10),并且此检测可能不正确,从而导致各种问题。您可以尝试更新浏览器定义以帮助正确检测。

于 2013-08-01T17:37:05.353 回答
-1

浏览器不会更改您的原始标记或代码。虽然浏览器确实会尝试弄清楚人们在使用无效标记时的意思,但它仍然不会改变您在开发人员工具中看到的任何内容。

已弃用的标记仅此而已。这并不意味着浏览器不知道如何处理它,但您也不能依赖它,因为浏览器供应商可以随时放弃对它的支持。

如果标记正在更改,那么它在服务器端或使用 javascript 完成。

于 2013-08-01T18:30:28.190 回答