2013-08-01 32 views
5

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.

+0

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

Trả lời

4

Có thể các điều khiển ASP.NET sẽ phát ra các HTML khác nhau cho các trình duyệt khác nhau, đặc biệt là các phiên bản khác nhau của IE. Họ sẽ cố gắng làm điều đó dựa trên khả năng của trình duyệt được phát hiện (hỗ trợ tập lệnh, hỗ trợ CSS, v.v.).

Ứng dụng ASP.NET cũ hơn (trước .NET 4.5) không nhận thức được các trình duyệt hiện đại như IE10 và phát hiện này có thể không chính xác, dẫn đến nhiều vấn đề khác nhau. Bạn có thể thử update browser definitions để giúp phát hiện chính xác.

-1

Trình duyệt không thực hiện thay đổi đối với đánh dấu hoặc mã ban đầu của bạn. Mặc dù các trình duyệt cố gắng tìm hiểu ý nghĩa của mọi người khi họ sử dụng đánh dấu không hợp lệ, nhưng trình duyệt vẫn không thay đổi bất kỳ thứ gì bạn thấy trong công cụ nhà phát triển.

Đánh dấu không được chấp nhận chỉ là điều đó. Nó không có nghĩa là một trình duyệt sẽ không biết phải làm gì với nó, nhưng bạn không thể dựa vào đó, bởi vì các nhà cung cấp trình duyệt được tự do để thả hỗ trợ cho nó bất cứ lúc nào.

Nếu đánh dấu đang thay đổi, thì nó ở phía máy chủ hoặc được thực hiện bằng javascript.

Các vấn đề liên quan