2011-08-17 4 views
9

Chúng tôi đã gặp sự cố gần đây vì bản phát hành Firefox 4, dữ liệu ScrollPosition không bao giờ được gửi tới người dùng Firefox. Điều này là do tệp trình duyệt tệp chỉ định rõ khả năng cho Firefox 3.x. Một giải pháp cho vấn đề này là cập nhật tệp trình duyệt trên mỗi máy chủ và bất kỳ khi nào phiên bản Firefox mới (hoặc Chrome hoặc bất kỳ phiên bản nào) được phát hành. Vâng, trước khi chúng tôi có cơ hội giải quyết vấn đề này, chúng tôi đã có trên Firefox 6, và nó có vẻ giống như một cuộc đua mà chúng tôi không muốn tiếp tục chạy.Những hạn chế trong việc thiết lập Page.ClientTarget = "uplevel" cho tất cả các trang là gì?

Nó chỉ ra rằng thiết lập Page.ClientTarget = "uplevel" trong trang chính (vì vậy, đối với mọi thứ, vô điều kiện) khắc phục sự cố Firefox ScrollPosition cụ thể của chúng tôi. Những hậu quả tiêu cực cho điều này như một giải pháp là gì? Người dùng trình duyệt Android có trải nghiệm tồi tệ hơn không? Họ chỉ đơn giản là đang tải xuống các trang không cần thiết lớn hơn bây giờ? Có lý do nào chúng ta không nên làm điều này không?

Các tài liệu cho Page.ClientTarget là khá đáng sợ:

uplevel, trong đó xác định khả năng trình duyệt tương đương với Internet Explorer 6.0 .

.. và có vẻ sai hoặc ít gây hiểu lầm nhất. Dường như nó được viết vào thời điểm IE6 là trình duyệt có khả năng nhất. Có "uplevel" thực sự có nghĩa là "giả sử trình duyệt có khả năng tất cả mọi thứ" hoặc "đối xử với nó như bạn muốn điều trị IE6"?

+0

firefox hiện tại phát hành là 6.0. kiểm tra xem sự cố này có còn tồn tại không – naveen

+0

Có, sự cố vẫn tiếp diễn. Không có gì Firefox có thể làm để khắc phục sự cố khác ngoài việc thay đổi số phiên bản của nó về một cái gì đó nhỏ hơn 4. Tệp trình duyệt (mà chúng tôi chưa bao giờ chạm vào) chỉ xác định phiên bản Firefox trước 4 là trình duyệt nâng cấp. –

+0

+1 cho liên kết MSDN cổ. Họ thực sự nên cập nhật điều đó. – naveen

Trả lời

3

Nếu bạn muốn yêu cầu WebForms thực hiện "lay off" một cách hiệu quả thì thiết lập Uplevel hoạt động, mặc dù bạn muốn thực hiện nó trong Page_Init sớm hơn Trang chính. Tại thời điểm này, WebForms sẽ cho rằng tất cả mọi người là một trình duyệt mới hơn so với trình duyệt của bạn.

1

Đối với tính tương thích phía máy chủ, không thể kiểm tra giới hạn thực của trình duyệt, tôi thích sử dụng danh sách đen thay vì danh sách trắng: nếu trình duyệt không được biết đến không tính năng hỗ trợ X thì tôi cho rằng nó hỗ trợ .

Bạn cũng có thể liệt kê tất cả các phiên bản trình duyệt, ví dụ: không có phiên bản nào của IE hỗ trợ tính năng X). điều này yêu cầu bạn phải cập nhật danh sách đen khi tính năng hỗ trợ của IE là X.

Các nâng cấp trình duyệt không được phá vỡ lược đồ này.

+0

Bạn sử dụng cơ chế nào để triển khai danh sách đen của mình? –

+0

Trong .NET - browsercaps – orip

+0

Một số ví dụ về các tính năng bạn vô hiệu hóa một cách rõ ràng cho một số trình duyệt nhất định trong danh sách đen của bạn là gì? Điều gì sẽ là hậu quả của việc để lại các tính năng được kích hoạt? –

0

Đây không phải là một câu trả lời cho "những gì là nhược điểm" câu hỏi, nhưng:

Bạn có thể sử dụng biểu thức thông thường trong việc phát hiện phiên bản trình duyệt trong các tập tin browsercaps.

Ví dụ: ngày 13 tháng 11 năm 2011 Microsoft phát hành bản cập nhật cho ASP.NET 4.0 đã thêm IE10 vào danh sách uplevel (và sửa lỗi trong tệp ie.browser, nằm ở \Windows\Microsoft.NET\Framework\v4.0.30319\Config\Browsers). Họ có một biểu thức chính quy chỉ kiểm tra phiên bản chính có một chữ số, nhưng sau khi bản vá bất kỳ phiên bản IE> = 6 nào sẽ được coi là uplevel.

Trước khi thay đổi:

<capability name="majorversion" match="[6-9]" /> 

Sau khi thay đổi:

<capability name="majorversion" match="[6-9]|[1-9]\d+" /> 

Tôi đoán bạn không chạy vào vấn đề này nữa, bởi vì ít nhất là trong 26 Tháng 10 năm 2011, các lệnh firefox cũng sử dụng regex để phát hiện các phiên bản uplevel> = 3: (từ tệp firefox.browser)

<browser id="Firefox3" parentID="Firefox"> 
    <identification> 
     <capability name="majorversion" match="^[3-9]|[1-9]\d+" /> 
    </identification> 

    <capabilities> 
     <capability name="javascriptversion"    value="1.8" /> 
     <capability name="supportsMaintainScrollPositionOnPostback" value="true" /> 
    </capabilities> 
</browser> 

nhưng nếu bạn vẫn còn có probs, chỉ cần sử dụng một regex chuyển tiếp suy nghĩ (một trong đó không có một "số phiên bản chính" lỗi như trong bản vá lỗi trước đó) trong firefox.browser tập tin