我正在跟踪 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。