browscap.ini
что get_browser()
зависит находится в http://browsers.garykeith.com/downloadsКак переносить get_browser() из PHP в ColdFusion?
Кто-нибудь знает, как порт, казалось бы, простой get_browser()
в CFML?
Спасибо!
browscap.ini
что get_browser()
зависит находится в http://browsers.garykeith.com/downloadsКак переносить get_browser() из PHP в ColdFusion?
Кто-нибудь знает, как порт, казалось бы, простой get_browser()
в CFML?
Спасибо!
Решенный!
Это основано на http://forums.adobe.com/thread/620512 и оптимизировано для работы с улучшенной корректностью.
Это все еще довольно медленно (~ 1 с), потому что работа с ini-файлом с ColdFusion означает, что каждый getProfileString()
- это диск ввода-вывода! Быстрее с SSD. :)
function get_browser(user_agent=CGI.HTTP_USER_AGENT, browscap_ini=expandPath("./browscap.ini"))
{
var result = {};
// Read wildcard patterns from the INI file
var browscap_list = getProfileSections(browscap_ini);
// Seed some variables
var browser_champion_pattern = "*";
// Loop through the patterns to find the best match (relative to length of name pattern)
for (var browser_name_pattern in browscap_list)
{
if (len(browser_name_pattern) >= len(browser_champion_pattern))
{
// Massage the wildcard into useable regex
var browser_name_regex = replaceList(browser_name_pattern, ".,*,?,(,),[,]", "\.,.*,.,\(,\),\[,\]");
if (left(browser_name_pattern, 1) != "*")
browser_name_regex = "^" & browser_name_regex;
if (right(browser_name_pattern, 1) != "*")
browser_name_regex &= "$";
// Test the resulting regex against the user agent
if (reFindNoCase(browser_name_regex, user_agent))
browser_champion_pattern = browser_name_pattern;
}
}
// Set the winning regex patterns
var browser_name_pattern = browser_champion_pattern;
// Fetch the winning info
var keynames = listToArray(browscap_list[browser_champion_pattern]);
for (var keyname in keynames)
result[keyname] = getProfileString(browscap_ini, browser_champion_pattern, keyname);
// Fetch the rest of the info from parents
while (structKeyExists(result, "parent"))
{
var parent = result.parent;
structDelete(result, "parent");
var keynames = listToArray(browscap_list[parent]);
for (var keyname in keynames)
if (!structKeyExists(result, keyname))
result[keyname] = getProfileString(browscap_ini, parent, keyname);
}
return result;
}
Включен в быстрый CFC с пользовательским анализатором INI здесь: https://github.com/henrylearn2rock/BrowscapCFC – Henry
Для этого требуется 'browscap.ini'. Сайт 'http: // browsers.garykeith.com /', похоже, не работает. 'github.com' не имеет образца –
может помочь: http://stackoverflow.com/questions/6294932/obtaining-browser-and-version-using-coldfusion –
@Dagon ТНХ, я опирался на 'browserDetect()' для хранения некоторых статистика посетителей, но в последнее время она возвращает много (неизвестных) – Henry
смартфонов/планшетов, всех новых интересных вещей, таких как дети –