2013-08-01 2 views
5

Я отслеживаю некоторые проблемы с совместимостью в проекте 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.

+0

Более чем вероятно, что сам контроль выполняет некоторую форму обнаружения браузера, а затем укладывается соответствующим образом. На самом деле это хороший способ поддерживать обратную совместимость - хотя, очевидно, это затрудняет переопределение разработчика. – Rake36

ответ

4

Возможно, элементы управления ASP.NET будут отображать разные HTML-файлы для разных браузеров, особенно в разных версиях IE. Они попытаются сделать это на основе обнаруженных возможностей браузера (поддержка скриптов, поддержка CSS и т. Д.).

Старые приложения ASP.NET (до .NET 4.5) не знают о современных браузерах, таких как IE10, и это обнаружение может быть неправильным, что приводит к различным проблемам. Вы можете попробовать update browser definitions, чтобы помочь исправить обнаружение.

-1

Браузеры не вносят изменений в оригинальную разметку или код. В то время как браузеры пытаются понять, что люди имели в виду, когда используют недопустимую разметку, они все равно не изменят ничего, что вы видите в инструментах разработчика.

Устаревшая разметка - это только. Это не значит, что браузер не будет знать, что с ним делать, но вы не можете полагаться на это либо потому, что разработчики браузеров могут отказаться от поддержки в любой момент.

Если разметка меняется, то она находится на стороне сервера или выполняется с помощью javascript.

Смежные вопросы