Web浏览器是否尝试修复错误/弃用的HTML?

时间:2013-08-01 17:22:57

标签: html asp.net

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

2 个答案:

答案 0 :(得分:4)

ASP.NET控件可能会为不同的浏览器发出不同的HTML,尤其是不同版本的IE。他们会尝试根据检测到的浏览器功能(脚本支持,CSS支持等)来做到这一点。

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

答案 1 :(得分:-1)

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

不推荐使用的标记只是那个。这并不意味着浏览器不会知道如何处理它,但您不能依赖它,因为浏览器供应商可以随时放弃对它的支持。

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