我正在跟踪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>
FF:
<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>
请注意额外的&lt; font&gt;和&lt; b&gt; IE版本中的标签。这是一个我正在维护的旧应用程序。它使用了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。
答案 0 :(得分:4)
ASP.NET控件可能会为不同的浏览器发出不同的HTML,尤其是不同版本的IE。他们会尝试根据检测到的浏览器功能(脚本支持,CSS支持等)来做到这一点。
较旧的ASP.NET应用程序(之前的.NET 4.5)不了解IE10等现代浏览器,并且此检测可能不正确,从而导致各种问题。您可以尝试update browser definitions来帮助纠正检测。
答案 1 :(得分:-1)
浏览器不会对原始标记或代码进行更改。虽然浏览器确实试图弄清楚人们在使用无效标记时的含义,但它仍然不会改变您在开发人员工具中看到的任何内容。
不推荐使用的标记只是那个。这并不意味着浏览器不会知道如何处理它,但您不能依赖它,因为浏览器供应商可以随时放弃对它的支持。
如果标记正在更改,那么它在服务器端或使用javascript完成。