2013-08-01 10 views
5

Ś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.

+0

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

Odpowiedz

4

Jest możliwe, że kontrolki ASP.NET będą emitować różne HTML dla różnych przeglądarek, szczególnie różnych wersji IE. Będą próbowali to zrobić na podstawie wykrytych umiejętności przeglądarki (obsługa skryptów, obsługa CSS itp.).

Starsze aplikacje ASP.NET (wcześniejsze .NET 4.5) nie znają nowoczesnych przeglądarek, takich jak IE10, a to wykrycie może być nieprawidłowe, co prowadzi do różnych problemów. Możesz spróbować uzyskać update browser definitions, aby pomóc poprawić wykrywanie.

-1

Przeglądarki nie dokonują zmian w oryginalnym tekście ani kodzie. Chociaż przeglądarki próbują dowiedzieć się, co ludzie mają na myśli, gdy używają nieprawidłowych znaczników, nadal nie zmieniają niczego, co widać w narzędziach programistycznych.

Przestarzałe oznaczenia to tylko to. Nie oznacza to, że przeglądarka nie będzie wiedziała, co z nią zrobić, ale nie można na niej polegać, ponieważ dostawcy przeglądarki mogą w każdej chwili zrezygnować z pomocy technicznej.

Jeśli znacznik się zmienia, oznacza to, że jest on po stronie serwera lub w języku javascript.

Powiązane problemy