мобильное обнаружение для холодного плавления - PullRequest
3 голосов
/ 04 октября 2011

Есть ли способ обнаружения, если пользователь на мобильном устройстве использует только coldfusion?

  1. Я не делаю перенаправление на мобильный телефон.
  2. Я использую медиазапросы CSS, чтобы изменить макет в соответствии с шириной экрана.
  3. Я просто хочу сделатьпростое, если мобильный рендеринг этой информации, иначе рендерит эту информацию вместо частей сайта, а не целиком.(например: если мобильный [показать анимацию jquery], в противном случае показать [ссылка] )
  4. Я не хочу тратить время на рендеринг обоих, если только для отображения нет информации, которая не собираетсяв любом случае будет отображаться.
  5. Нет обнаружения мобильного javascript (у людей может быть отключен JavaScript в их браузерах)

Ответы [ 7 ]

9 голосов
/ 25 апреля 2012

Я использовал код на http://detectmobilebrowsers.com/, чтобы сделать это.Они поддерживают регулярные выражения в актуальном состоянии.На странице о нем есть информация о планшетах, если вам это нужно, а также о мобильных устройствах.Отключите функцию UDF, чтобы легко обновлять ее при последующих изменениях.

Версия CFM:

<cfif reFindNoCase("android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino",CGI.HTTP_USER_AGENT) GT 0 OR reFindNoCase("1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-",Left(CGI.HTTP_USER_AGENT,4)) GT 0>
   <cflocation url="http://mobile.yoururl.com">
</cfif>
3 голосов
/ 04 октября 2011

Я написал запись в блоге об этой самой вещи!

http://www.mccran.co.uk/index.cfm/2010/6/4/Simple-Coldfusion-script-to-detect-if-a-user-is-on-a-Mobile-platform

<cfif findNoCase('Android', cgi.http_user_agent,1)>
<!--- relocate to Android version of the mobile site --->
<cflocation url="android/">
<cfelseif findNoCase('iPhone', cgi.http_user_agent,1)>
<!--- relocate to iphone version of the mobile site --->
<cflocation url="iphone/">
</cfif>

Вы можете легко обнаружить браузер по строке агента пользователя.Но, как я недавно видел, такие браузеры, как Chrome, позволят вам изменить строку вашего пользовательского агента:

http://www.mccran.co.uk/index.cfm/2011/9/25/Samsung-Galaxy-Tab-101-Switching-your-browser-from-mobile-view

1 голос
/ 04 октября 2011

Используйте CGI.HTTP_USER_AGENT:

<cfif (CGI.HTTP_USER_AGENT is "MobileAgentOne")>

замените MobileAgentOne на браузер, который вы ищете.

Быстрый Google должен предоставить вам адекватный список мобильных агентов, которые в настоящее время используютсяНапример: http://www.useragentstring.com/pages/Mobile%20Browserlist/

Если вы хотите быть более надежным, вот способ обеспечить частичное совпадение, чтобы вы могли искать семейства мобильных телефонов, а не перечислять миллион различныхуникальные мобильные агенты:

<cfset agentList = "ASUS,AUDIOVOX,BenQ">

<cfloop list="#agentList#" index="thisAgent">
    <cfif FindNoCase(thisAgent, CGI.HTTP_USER_AGENT)>
        Found
    </cfif>
</cfloop>
0 голосов
/ 16 февраля 2013

(Извините, что отвечаю, а не комментирую, я не могу комментировать или голосовать)

Мне изначально понравилось решение mujimu.Я поместил его на свой сайт, и он, похоже, хорошо работал с моим собственным iphone.Однако я начал тестировать с этим http://www.mobilephoneemulator.com/, и он не работал для большинства устройств.

Вот что я хотел бы сделать (и буду делать).Выведите что-то вроде этого в незаметном месте <cfoutput>#CGI.HTTP_USER_AGENT#</cfoutput>.Затем проверьте и запишите, что выводят устройства.

Затем, используйте что-то вроде этого (спасибо, Питер Боутон) и между трубами используйте отдельное ключевое слово из тестирования ...

<cfif refindNoCase
    ( 'distinct_keyword|android|blackberry|iphone|ipod|mobile|palm|phone|windows\s+ce'
    , CGI.HTTP_USER_AGENT
    )>
    probably mobile
</cfif>

После моего начального тестирования вот списокЯ придумал.Пожалуйста, дайте мне знать, если вы считаете, что это точно ...

ARCELIK, Access, Acer, Ahong, Aiko, Airis, Airness, Alcatel, AlphaCell Wireless, Amazon, Amoi, Amoisonic, Android, AnexTek, Apple,Archos, Asmobile, Aspen, Asus, ASUSTeK COMPUTER INC., Audiovox, Becker, BEKO, Bellawave, BellWave, BenQ, BenQSiemens, BenQ-Siemens, Bird, Bleu, Blue Coat, B-Mobile, Болт, Байтобайл, Capitel, Casio,CDM, CECT, CheckCom, Cingular, Cking, Compal, Compaq, CoralWeb, Крикет, Dai Telecom, Dallab, Опасность, Daxian, DBTEL, Dicam, Dmobo, DoCoMo, Dopod, Дорис, DreamPhone, EDL, Elite, ELSON, Emblaze, Emobile, Enteos, Era, Ericsson, Ericy, ETEN, EZIO, EZZE, Fitel, Fly, Fujitsu, универсальный, универсальный веб-браузер, универсальный Windows, универсальный Windows Mobile, GIGABYTE, Gionee, Google, Gradiente, Grundig, Haier, Handspring, Hedy,Hei, Helio, Hewlett-Packard, Hisense, Hitachi, HP, HTC, HTC Corporation, HTIL, HUAWEI, Hummer, IAC OKWAP, IAC OKWAP Mobile Communications, Идея, iKoMo, IM, Imate, i-mate, i-mobile, Infineon, InfoSonics, Innostream, INQ Mobile, Itelco, IXI, KCM, KDDI, KDDI - SonyEricsson, KDDI-Casio, KDDI-Hitachi, KDDI-KioCERA, KDDI-Kyocera, KDDI-Panasonic, KDDI-Pantech, KDDI-Sanyo, KDDI-Sharp, KDDI-SonyEriccson, KDDI-SonyEricsson, KDDI-Toshiba, Kejian, Kisen, Клондайк, KONKA, Козы, КПТ, K-Touch,Kyocera, Kyocera Wireless Corp, LCT, Lenovo, Lenovo Mobile, Lexibook, Lexus, LG, LG Electronics, LGE, Lobster, Longcos, LT, LXE, M3 Gate, Malata, универсальный на основе MAUI, Maxon, Medion, MicroMax, Microsoft,MIO, Mio Technology, Miracle, MiTAC, Mitsubishi, Mobile Wireless Group, MOBISTEL, Modelabs, ModelLabs, Modottel, Modu, MOMO Design, Morange, Motorola, Myphone, NEC, Neonode, Newgen, Nexian, Nintendo, Nokia, Novarra, NTT DoCoMo, NTT DoCoMo FOMA 3G, O2, ONDA, Openwave, Opera, Optimay, Orange, Palm, PalmOne, Panasonic, Panda, Pantech, PCD, Philips, PhoneOne, Pirelli-Arcor, Porsche Design, Porshe, Посейдон, Psion, QCI, QMobile, Qtek, Raks, Reporo, Research In Motion Ltd., RIM, Робот, Рон, Ровер, RT, Sagem, SAMART, Samsung, Sanyo, SavaJe, SEC, Semc, Sendo, Sharp, Siemens, Skyfire, Skyspring, Skyspring Vitelcom,Skyworth, SKYZEN, программное обеспечение SlobTrot, SmartTrust, Smile, SoftBank, Sonim, Sony, Sony Ericsson Mobile Communications, SonyEricsson, Spice, Sprint, SPV, Sunrise, TCL, Techfaith, Tel.Me., Telecom Italia, Telit, TIANYU, T-Mobile, Toplux, Toshiba, Tranxcode, TTPCom, TvCompass, TVCompass DMR1500, Ubiquam, UCWEist, Uniscope, Uniscope, Uriver, Usha Lexus, Utec, UTStarcom, V3m (Metro PCS), Vacom, Velocity Mobile, Венера, Verizon, Vertu, VeryKool, VERZIOWORLD, Vitelcom, VITELCOM для Telefonica Movistar, VK, VK Mobile, Vodafone, Vodafone ZTE, Voxtel,W3C, Wapamp, Wapsilon, WAPUniverse, WellcoM, WinWAP Technologies, Wonu, XDA, Yas, Yospace Ericsson, Yospace Motorola, Yospace Nokia, Yospace Sharp, Yospace Siemens, Yospace SonyEricsson, Yulong, Zonda, ZT, ZTE, .mobi

0 голосов
/ 16 мая 2012

Уходит ли в шапке решение detemobilebrowsers.com? Есть ли причина не ставить линию обнаружения перед заголовком? У меня есть набор фреймов (я знаю, что это не идеально ...), и я думаю, что набор фреймов обнаруживается первым и загружает мои фреймы перед запуском сценария обнаружения. (Это возможно?) Работает нормально в шапке с android, но не kindle, ipad или iphone (я добавил строку ipad).

Спасибо за чтение, LPP

0 голосов
/ 28 января 2012

(Извиняюсь за то, что сделал это ответом, но я не могу комментировать здесь.)

Тестирование на строку «android» ловит кучу планшетов (Motorola Xoom, Samsung Galaxy Tab, Asus Transformer, другие от Toshiba, Sony, Acer и т. Д.). Android - это ОС, а не класс устройств.

Я бы сказал, что реалистичный ответ во многом зависит от того, что вы считаете «мобильным» устройством. Можно утверждать, что многие планшеты отлично справляются с «обычными» (немобильными) сайтами, учитывая их вычислительную мощность и физический размер экрана, поэтому их объединение с гораздо меньшими и менее мощными мобильными телефонами делает этих пользователей «1005 * плохой услугой»,

Обратите внимание, что «iPhone» указан в нескольких предыдущих ответах, но не «iPad», поэтому они неявно исключают планшеты iOS, что я считаю правильным и для Android.

Ответ, основанный на таком подходе, к сожалению, гораздо менее тривиален. В сети есть различные решения , одна из основных версий которых заключается в поиске слова mobile и исключает некоторые специфичные для планшета строки, такие как tablet, pad, xoom, eeepc, flyer и т. Д. Однако новые устройства появляются каждую неделю, и поиск даже самых популярных из них будет в лучшем случае сложной задачей.

0 голосов
/ 04 октября 2011

Вы можете проверить значение CGI.HTTP_USER_AGENT и посмотреть, указывает ли оно, что клиент является мобильным.

Вот небольшой фрагмент кода, основанный на некотором коде Python, который я нашел , но можетбыть более продвинутые проверки вы можете сделать:

<cfif refindNoCase
    ( 'android|blackberry|iphone|ipod|mobile|palm|phone|windows\s+ce'
    , CGI.HTTP_USER_AGENT
    )>
    probably mobile
</cfif>
...