2011-01-16 15 views
51

हे सब लोग, मैं सोच रहा था कि रेल में ब्राउज़र का पता लगाने के लिए उद्योग के भीतर कौन सी विधियां मानक हैं? क्या वहां कोई मणि, लाइब्रेरी या नमूना कोड है जो ब्राउजर को निर्धारित करने में मदद कर सकता है और (एक्स) एचटीएमएल के बॉडी एलिमेंट में कक्षा या आईडी लागू कर सकता है? धन्यवाद, मैं बस सोच रहा हूं कि हर कोई क्या उपयोग करता है और क्या ऐसा करने की स्वीकार्य विधि है?रेल ब्राउज़र डिटेक्शन विधियां

मुझे पता है कि हम user.agent प्राप्त कर सकते हैं और उस स्ट्रिंग को पार्स कर सकते हैं, लेकिन मुझे यकीन नहीं है कि यह ब्राउज़र पहचान करने का एक स्वीकार्य तरीका है।

इसके अलावा, मैं यहां फीचर डिटेक्शन पर बहस करने की कोशिश नहीं कर रहा हूं, मैंने स्टैक ओवरफ्लो पर इसके लिए कई जवाब पढ़े हैं, मैं बस इतना पूछ रहा हूं कि आपने क्या किया है।

[अद्यतन]

तो faunzy GitHub पर करने के लिए धन्यवाद मैं इन सबसे छुटकारा रेल में उपयोगकर्ता एजेंट की जाँच के बारे में थोड़ा समझ में है, लेकिन अभी भी यकीन नहीं करता है, तो इस रेल में इसके बारे में जाने के लिए सबसे अच्छा तरीका है 3. लेकिन यहाँ है क्या मैं अब तक मिल गया है:

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 

उत्तर

23

पुस्तकालय रूबी पुस्तकालय GitHub पर अधिक नहीं है तैनात है: https://github.com/gshutler/useragent

मैं इसे अपने आप का उपयोग करें और के रूप में अब तक विज्ञापित यह काम कर रहा। आपके उपयोग के मामले के लिए, आप शायद पुस्तकालय को अपने रेल परियोजना या कुछ समान में एक सहायक विधि के भीतर से कॉल कर सकते हैं।

उसने कहा, मुझे पूरी तरह से यकीन नहीं है कि HTTP_USER_AGENT रेल सहायक सहायक तरीकों से अवगत कराया गया है। यदि इसका खुलासा नहीं किया जाता है, तो आप हमेशा एक नियंत्रक विधि को एक सहायक के रूप में बेनकाब कर सकते हैं (AbstractController::Helpers::ClassMethods#helper_method का उपयोग करके)।

+0

संदर्भ के लिए धन्यवाद, मैंने अपना पुस्तकालय बनाने के लिए उस पुस्तकालय का उपयोग किया है। – alvincrespo

+4

मैं उत्सुक हूं ... आपने पुस्तकालय के अपने संस्करण में क्या जोड़ा? क्या सोर्स कोड कहीं उपलब्ध है? –

+0

लिंक मर चुका है। : x –

4

request.env['HTTP_USER_AGENT'], यह आपके ग्राहक के उपयोगकर्ता एजेंट वापस आ जाएगी की कोशिश करो। वहाँ भी एक त्वरित सहायक द्वारा Hubert Łępicki

+0

मैंने HTTP_REFERER को आजमाया लेकिन उसने कुछ भी वापस नहीं किया, इसलिए मैंने HTTP_USER_AGENT का उपयोग किया और यह सही उपयोगकर्ता एजेंट लौटा, हालांकि मैं इस स्ट्रिंग को पार्स करने के लिए उपयोग किए गए एक विशेष तरीकों की तलाश में हूं, उदाहरण के लिए कस्टम निर्मित रेगेक्स या पुस्तकालय जो मौजूद है जो आपके लिए यह करता है, एक सहायक की तरह। – alvincrespo

+0

रेफरर उपयोगकर्ता एजेंट से संबंधित नहीं है। यह वह जगह है जहां से संदर्भित संसाधन (उदा। यूआरएल ने एक छवि लोड की है या पृष्ठ को किस पृष्ठ को लोड किया है, आदि) – xinit

+0

क्षमा करें, मेरा मतलब उपयोगकर्ता एजेंट था। और मैंने आपको एक ही चीज़ से जोड़ा ... – farnoy

57

browser मणि विशेष रूप से रेल में ब्राउज़र पहचान के लिए डिज़ाइन किया गया है।

+0

मणि के बारे में नहीं पता था कि इससे मुझे बहुत मदद मिली! टैबलेट के लिए –

+0

यह केवल – Evan

+0

के रूप में आईपैड और एंड्रॉइड को जानता है हमने बड़े डेटा ऐप्स में इसका व्यापक रूप से उपयोग किया है; यह बहुत अच्छा है। आप बॉट्स को स्क्रीन करने के लिए थोड़ा सा भी संशोधित कर सकते हैं; मेरा मानना ​​है कि मैंने ऐसा करने की क्षमता के साथ एक पुल अनुरोध किया है। – rcd

संबंधित मुद्दे