Śledzę niektóre problemy z kompatybilnością krzyżową w projekcie ASP.NET WebForms i mam pewne dziwne zachowanie. Naciśnięcie tej samej strony w różnych przeglądarkach daje różne wyniki, co zdarza się zbyt często. Ciekawość tego przypadku polega na tym, że kiedy oglądam źródło w różnych przeglądarkach, pokazuje mi się inny html.Czy przeglądarki internetowe próbują naprawić zły/nieaktualny 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>
Uwaga dodatkowa <czcionki> i <b> tagi w wersji IE. To jest stara aplikacja, w której robię konserwację. Używa kontrolki Menu Skm, a czcionka pogrubiona i Verdana są jawnie ustawione w atrybutach kontrolek.
<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>
Dalsze kłopotliwy mnie, to jest html widzimy View Source użyciu 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>
Próbuję wyśledzić, czy jest to serwer renderowania inny html w oparciu o UserAgent lub jeśli przeglądarki starają się być inteligentne, wprowadzając zmiany w locie i pokazując wersję "oczyszczoną" podczas przeglądania źródła. Mam nadzieję, że nie jest to połączenie obu.
Edycja: Ja (a raczej klient) nie zauważyłem tego, dopóki nie zmigrowałem hosta z serwera Win2k3 na serwer Win2k3 R2. Jeśli trafię na serwer R2 z IE10, otrzymam te dodatkowe tagi. Jeśli trafię na serwer inny niż R2 z IE10, nie otrzymam tych tagów. Dokładny ten sam kod i oba IIS6.
Najprawdopodobniej sama kontrola wykonuje wykrywanie przeglądarki, a następnie odpowiednio ją styluje. W rzeczywistości jest to dobry sposób na zachowanie zgodności wstecznej - choć oczywiście utrudnia to programistom nadpisanie. – Rake36