Я отслеживаю некоторые проблемы с совместимостью в проекте ASP.NET WebForms, и я сталкиваюсь с каким-то своеобразным поведением. Нахождение одной и той же страницы с разными браузерами дает разные результаты, что происходит слишком часто. Что любопытно в этом случае, когда я просматриваю источник в разных браузерах, он показывает мне разные html.У веб-браузеров пытаются исправить плохой/устаревший 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>
Chrome:
<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. Это старое приложение, в котором я занимаюсь обслуживанием. Он использует элемент управления меню skm, а жирный шрифт 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>
озадачивает меня Кроме того, это HTML мы видим View Source с помощью IE9:
<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>
Я пытаюсь отследить, является ли это сервер рендеринга другого HTML на основе UserAgent или если браузеры стараются быть умными, делая изменения «на лету» и показывая «очищенную» версию при просмотре источника. Надеюсь, это не какая-то комбинация обоих.
Редактировать: Я (или, скорее, клиент) этого не заметил, пока не перенесла хост с сервера Win2k3 на сервер Win2k3 R2. Если я удалю сервер R2 из IE10, я получу те дополнительные теги. Если я удалю сервер без R2 из IE10, я не получаю эти теги. Точный код и оба IIS6.
Более чем вероятно, что сам контроль выполняет некоторую форму обнаружения браузера, а затем укладывается соответствующим образом. На самом деле это хороший способ поддерживать обратную совместимость - хотя, очевидно, это затрудняет переопределение разработчика. – Rake36