2011-01-16 34 views
51

Xin chào mọi người, tôi đã tự hỏi phương pháp nào là tiêu chuẩn trong ngành để phát hiện trình duyệt trong Rails? Có một gem, thư viện hoặc mã mẫu ở đâu đó có thể giúp xác định trình duyệt và áp dụng một lớp hoặc id cho phần tử body của (X) HTML? Cảm ơn, tôi chỉ tự hỏi những gì mọi người sử dụng và liệu có được chấp nhận phương pháp làm điều này?Rails Phương pháp phát hiện trình duyệt

Tôi biết rằng chúng tôi có thể lấy user.agent và phân tích chuỗi đó, nhưng tôi không chắc liệu đó có phải là cách chấp nhận được để phát hiện trình duyệt hay không.

Ngoài ra, tôi không cố gắng tranh luận về tính năng phát hiện ở đây, tôi đã đọc nhiều câu trả lời cho điều đó trên StackOverflow, tất cả những gì tôi hỏi là những gì các bạn đã làm.

[UPDATE]

Vì vậy, nhờ faunzy trên GitHub, tôi đã loại hiểu một chút về việc kiểm tra các đại lý người dùng trong Rails, nhưng vẫn không chắc chắn nếu điều này là cách tốt nhất để đi về nó trong Rails 3. Nhưng đây là những gì tôi đã nhận được cho đến nay:

def users_browser 
user_agent = request.env['HTTP_USER_AGENT'].downcase 
@users_browser ||= begin 
    if user_agent.index('msie') && !user_agent.index('opera') && !user_agent.index('webtv') 
       'ie'+user_agent[user_agent.index('msie')+5].chr 
    elsif user_agent.index('gecko/') 
     'gecko' 
    elsif user_agent.index('opera') 
     'opera' 
    elsif user_agent.index('konqueror') 
     'konqueror' 
    elsif user_agent.index('ipod') 
     'ipod' 
    elsif user_agent.index('ipad') 
     'ipad' 
    elsif user_agent.index('iphone') 
     'iphone' 
    elsif user_agent.index('chrome/') 
     'chrome' 
    elsif user_agent.index('applewebkit/') 
     'safari' 
    elsif user_agent.index('googlebot/') 
     'googlebot' 
    elsif user_agent.index('msnbot') 
     'msnbot' 
    elsif user_agent.index('yahoo! slurp') 
     'yahoobot' 
    #Everything thinks it's mozilla, so this goes last 
    elsif user_agent.index('mozilla/') 
     'gecko' 
    else 
     'unknown' 
    end 
    end 

    return @users_browser 
end 

Trả lời

23

Có thư viện thư viện ruby ​​qua tại GitHub: https://github.com/gshutler/useragent

tôi sử dụng nó bản thân mình, và nó hoạt động như quảng cáo cho đến nay. Đối với trường hợp sử dụng của bạn, bạn có thể gọi thư viện từ bên trong một phương thức trợ giúp trong dự án Rails của bạn hoặc một cái gì đó tương tự.

Điều đó nói rằng, tôi không hoàn toàn chắc chắn nếu các HTTP_USER_AGENT được tiếp xúc với phương pháp trợ giúp Rails. Trong trường hợp nó không được tiếp xúc, bạn luôn có thể phơi bày một phương pháp điều khiển như một người trợ giúp (bằng cách sử dụng AbstractController::Helpers::ClassMethods#helper_method).

+0

Cảm ơn bạn đã tham khảo, tôi đã sử dụng thư viện đó để tạo tài liệu của riêng mình. – alvincrespo

+4

Tôi tò mò ... bạn đã thêm gì vào phiên bản thư viện của mình? Mã nguồn có sẵn ở đâu đó không? –

+0

Liên kết đã chết. : x –

4

Hãy thử request.env['HTTP_USER_AGENT'], điều này sẽ trả lại tác nhân người dùng của khách hàng của bạn. Ngoài ra còn có một người trợ giúp nhanh chóng đăng bởi Hubert Łępicki

+0

Tôi đã thử HTTP_REFERER nhưng không trả lại bất cứ điều gì vì vậy tôi đã sử dụng HTTP_USER_AGENT và nó trả về tác nhân người dùng chính xác, tuy nhiên tôi đang tìm một phương pháp cụ thể mà mọi người đã sử dụng để phân tích cú pháp chuỗi này, ví dụ như regex được tạo tùy chỉnh hoặc thư viện tồn tại mà làm điều này cho bạn, giống như một người trợ giúp. – alvincrespo

+0

Liên kết giới thiệu không liên quan đến tác nhân người dùng. Đây là nơi tài nguyên được giới thiệu (ví dụ: url nào đã tải hình ảnh hoặc trang nào khác đã tải trang, v.v.) – xinit

+0

Xin lỗi, ý tôi là tác nhân người dùng. Và tôi đã liên kết bạn với cùng một điều ... – farnoy

57

Đá quý browser được thiết kế đặc biệt để phát hiện trình duyệt trong Rails.

+0

Không biết về đá quý nó giúp tôi rất nhiều! –

+0

cho máy tính bảng chỉ biết ipad và android kể từ hôm nay – Evan

+0

Chúng tôi đã sử dụng rộng rãi trong các ứng dụng dữ liệu lớn; nó là rất tốt. Bạn thậm chí có thể sửa đổi nó một chút để sàng lọc chương trình; Tôi tin rằng tôi đã thực hiện một yêu cầu kéo với khả năng làm như vậy. – rcd

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