Tôi đang theo dõi một số vấn đề tương thích chéo trong dự án ASP.NET WebForms và tôi đang chạy trên một số hành vi đặc biệt. Việc nhập cùng một trang với các trình duyệt khác nhau sẽ mang lại kết quả khác nhau, điều này xảy ra thường xuyên. Điều gì là tò mò về trường hợp này là khi tôi xem nguồn trong các trình duyệt khác nhau, nó cho tôi thấy html khác nhau.Trình duyệt web có cố gắng sửa lỗi html bị lỗi/không dùng nữa không?
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>
Lưu ý thêm < phông chữ > và <b> thẻ trong phiên bản trình duyệt IE. Đây là một ứng dụng cũ tôi đang bảo trì. Nó sử dụng một điều khiển Menu skm và phông chữ đậm và Verdana được đặt rõ ràng trong các thuộc tính của điều khiển.
<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>
Tiếp tục bối rối tôi, đây là html chúng ta thấy với View Source sử dụng 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>
Tôi đang cố gắng để theo dõi xuống cho dù đó là máy chủ render html khác nhau dựa trên UserAgent hoặc nếu các trình duyệt đang cố gắng thông minh bằng cách thực hiện các thay đổi khi đang di chuyển và hiển thị phiên bản "đã được dọn dẹp" khi bạn xem nguồn. Hy vọng rằng, nó không phải là một sự kết hợp của cả hai.
Chỉnh sửa: Tôi (hoặc đúng hơn là khách hàng) không nhận thấy điều này cho đến khi tôi di chuyển máy chủ từ máy chủ Win2k3 sang máy chủ Win2k3 R2. Nếu tôi nhấn máy chủ R2 từ IE10, tôi sẽ nhận được các thẻ phụ đó. Nếu tôi nhấn máy chủ không phải R2 từ IE10, tôi không nhận được các thẻ đó. Chính xác cùng một mã và cả IIS6.
Nhiều khả năng, bản thân kiểm soát đang thực hiện một số hình thức phát hiện trình duyệt, sau đó tạo kiểu phù hợp. Đó thực sự là một cách tốt để họ duy trì khả năng tương thích ngược - mặc dù rõ ràng, làm cho nhà phát triển khó có thể ghi đè lên. – Rake36