2013-08-01 5 views
5

Ich bin auf der Suche nach Kompatibilitätsproblemen in einem ASP.NET-WebForms-Projekt, und ich stoße auf ein seltsames Verhalten. Wenn Sie dieselbe Seite mit verschiedenen Browsern aufrufen, führt dies zu unterschiedlichen Ergebnissen, die nur allzu oft auftreten. Was ist neugierig auf diesen Fall ist, wenn ich Quelle in verschiedenen Browsern, zeigt es mir verschiedene HTML.Versuchen Webbrowser, fehlerhaftes/veraltetes HTML zu reparieren?

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> 

Beachten Sie die zusätzliche <Schrift> und <b> Tags in der IE-Version. Dies ist eine alte App, die ich gerade mache. Es verwendet ein Skm-Menü-Steuerelement und die Fett- und Verdana-Schriftart sind explizit in den Attributen des Steuerelements festgelegt.

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

verwirrend mich Weiterhin ist dies der html sehen wir mit Blick Quelle mit 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> 

Ich versuche, nach unten zu verfolgen, ob es der Server verschiedenen HTML-Rendering auf der Grundlage des Useragenten oder wenn Die Browser versuchen, schlau zu sein, indem sie Änderungen während des Betriebs vornehmen und die "bereinigte" Version anzeigen, wenn Sie die Quelle anzeigen. Hoffentlich ist es keine Kombination von beidem.

Bearbeiten: Ich (oder eher der Kunde) bemerkte dies nicht, bis ich den Host von einem Win2k3-Server auf einen Win2k3 R2-Server migriert. Wenn ich den R2-Server von IE10 aus betrete, erhalte ich diese zusätzlichen Tags. Wenn ich den Nicht-R2-Server von IE10 aus betrete, erhalte ich diese Tags nicht. Exact gleichen Code und beide IIS6.

+0

Mehr als wahrscheinlich, macht die Steuerung selbst eine Form der Browser-Erkennung, dann Styling geeignet. Es ist eigentlich ein guter Weg für sie, die Rückwärtskompatibilität aufrechtzuerhalten - obwohl es natürlich schwieriger für einen Entwickler ist, sie zu überschreiben. – Rake36

Antwort

4

Es ist möglich, dass ASP.NET-Steuerelemente für verschiedene Browser unterschiedliche HTML-Versionen ausgeben, insbesondere verschiedene IE-Versionen. Sie werden dies basierend auf den erkannten Browserfähigkeiten versuchen (Skriptunterstützung, CSS-Unterstützung usw.).

Ältere ASP.NET-Anwendungen (vor .NET 4.5) kennen keine modernen Browser wie IE10 und diese Erkennung ist möglicherweise falsch, was zu verschiedenen Problemen führt. Sie können versuchen, update browser definitions zu helfen, die Erkennung zu korrigieren.

-1

Browser nehmen keine Änderungen an Ihrem ursprünglichen Markup oder Code vor. Während Browser versuchen, herauszufinden, was Menschen gemeint haben, wenn sie ungültiges Markup verwenden, wird es nichts ändern, was Sie in den Entwicklertools sehen.

Veraltete Markup ist nur das. Es bedeutet nicht, dass ein Browser nicht weiß, was damit zu tun ist, aber Sie können sich auch nicht darauf verlassen, weil Browser-Anbieter jederzeit die Möglichkeit haben, Support dafür abzulehnen.

Wenn sich das Markup ändert, ist es auf der Serverseite oder mit Javascript.