diff --git a/package.json b/package.json index 09bfd49ff..5e067dd25 100755 --- a/package.json +++ b/package.json @@ -196,6 +196,7 @@ "dist", "src" ], + "bin": "./script/cli.js", "scripts": { "build": "./script/build-dist.sh && ./script/build-module.js", "build+test": "npm run build && npm run test", diff --git a/script/cli.js b/script/cli.js new file mode 100755 index 000000000..785a10426 --- /dev/null +++ b/script/cli.js @@ -0,0 +1,4 @@ +#!/usr/bin/env node + +const UAParser = require('ua-parser-js'); +console.log(JSON.stringify(process.argv.slice(2).map(ua => UAParser(ua)), null, 4)); \ No newline at end of file diff --git a/src/enums/ua-parser-enums.js b/src/enums/ua-parser-enums.js index 8930a2712..c0706779b 100644 --- a/src/enums/ua-parser-enums.js +++ b/src/enums/ua-parser-enums.js @@ -50,7 +50,7 @@ const Browser = Object.freeze({ FENNEC: 'Fennec', FLOCK: 'Flock', FLOW: 'Flow', - GO: 'Go Browser', + GO: 'GoBrowser', GOOGLE_SEARCH: 'GSA', HEYTAP: 'HeyTap', HUAWEI: 'Huawei Browser', @@ -128,9 +128,9 @@ const Browser = Object.freeze({ TESLA: 'Tesla', TIKTOK: 'TikTok', TIZEN: 'Tizen Browser', + TWITTER: 'Twitter', UC: 'UCBrowser', UP: 'UP.Browser', - VIERA: 'Viera', VIVALDI: 'Vivaldi', VIVO: 'Vivo Browser', W3M: 'w3m', diff --git a/src/main/ua-parser.js b/src/main/ua-parser.js index bbc4a7bc3..ca16c0569 100755 --- a/src/main/ua-parser.js +++ b/src/main/ua-parser.js @@ -309,17 +309,20 @@ /\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i // Baidu ], [VERSION, [NAME, 'Baidu']], [ /(kindle)\/([\w\.]+)/i, // Kindle - /(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer + /(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\/ ]?([\w\.]*)/i, + // Lunascape/Maxthon/Netfront/Jasmine/Blazer/Sleipnir // Trident based /(avant|iemobile|slim)\s?(?:browser)?[\/ ]?([\w\.]*)/i, // Avant/IEMobile/SlimBrowser /(?:ms|\()(ie) ([\w\.]+)/i, // Internet Explorer // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon - /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i, - // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo + /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar)\/([-\w\.]+)/i, + // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar /(heytap|ovi)browser\/([\d\.]+)/i, // HeyTap/Ovi /(weibo)__([\d\.]+)/i // Weibo ], [NAME, VERSION], [ + /\bddg\/([\w\.]+)/i // DuckDuckGo + ], [VERSION, [NAME, 'DuckDuckGo']], [ /(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i // UCBrowser ], [VERSION, [NAME, 'UCBrowser']], [ /microm.+\bqbcore\/([\w\.]+)/i, // WeChat Desktop for Windows Built-in Browser @@ -352,6 +355,8 @@ ], [VERSION, [NAME, PREFIX_MOBILE + FIREFOX]], [ /\bqihu|(qi?ho?o?|360)browser/i // 360 ], [[NAME, '360' + SUFFIX_BROWSER]], [ + /\b(qq)\/([\w\.]+)/i // QQ + ], [[NAME, /(.+)/, '$1Browser'], VERSION], [ /(oculus|sailfish|huawei|vivo)browser\/([\w\.]+)/i ], [[NAME, /(.+)/, '$1' + SUFFIX_BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser /samsungbrowser\/([\w\.]+)/i // Samsung Internet @@ -366,7 +371,7 @@ /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i, // Tesla /m?(qqbrowser|2345Explorer)[\/ ]?([\w\.]+)/i // QQBrowser/2345 Browser ], [NAME, VERSION], [ - /(lbbrowser)/i, // LieBao Browser + /(lbbrowser|rekonq)/i, // LieBao Browser/Rekonq /\[(linkedin)app\]/i // LinkedIn App for iOS & Android ], [NAME], [ @@ -379,6 +384,7 @@ /safari (line)\/([\w\.]+)/i, // Line App for iOS /\b(line)\/([\w\.]+)\/iab/i, // Line App for Android /(alipay)client\/([\w\.]+)/i, // Alipay + /(twitter)(?:and| f.+e\/([\w\.]+))/i, // Twitter /(chromium|instagram|snapchat)[\/ ]([-\w\.]+)/i // Chromium/Instagram/Snapchat ], [NAME, VERSION], [ /\bgsa\/([\w\.]+) .*safari\//i // Google Search Appliance on iOS @@ -422,19 +428,18 @@ ], [VERSION, [NAME, FIREFOX+' Reality']], [ /ekiohf.+(flow)\/([\w\.]+)/i, // Flow /(swiftfox)/i, // Swiftfox - /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i, - // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar + /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\/ ]?([\w\.\+]+)/i, + // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i, // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix /(firefox)\/([\w\.]+)/i, // Other Firefox-based /(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i, // Mozilla // Other - /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i, - // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser - /(links) \(([\w\.]+)/i, // Links - /panasonic;(viera)/i // Panasonic Viera - ], [NAME, VERSION], [ + /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i, + // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser + /(links) \(([\w\.]+)/i // Links + ], [NAME, [VERSION, /_/g, '.']], [ /(cobalt)\/([\w\.]+)/i // Cobalt ], [NAME, [VERSION, /[^\d\.]+./, EMPTY]] @@ -523,6 +528,8 @@ /; (\w+) bui.+ oppo/i, /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [ + /\b(opd2\d{3}a?) bui/i + ], [MODEL, [VENDOR, 'OPPO'], [TYPE, TABLET]], [ // Vivo /vivo (\w+)(?: bui|\))/i, diff --git a/test/specs/browser-all.json b/test/specs/browser-all.json index 471cdb3b4..77aca1b16 100644 --- a/test/specs/browser-all.json +++ b/test/specs/browser-all.json @@ -209,6 +209,16 @@ "major" : "11" } }, + { + "desc" : "Blazer", + "ua" : "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/hspr-H102; Blazer/4.0) 16;320x320", + "expect" : + { + "name" : "Blazer", + "version" : "4.0", + "major" : "4" + } + }, { "desc" : "Bolt", "ua" : "Mozilla/5.0 (X11; 78; CentOS; US-en) AppleWebKit/527+ (KHTML, like Gecko) Bolt/0.862 Version/3.0 Safari/523.15", @@ -389,6 +399,26 @@ "major" : "78" } }, + { + "desc" : "Comodo Dragon", + "ua" : "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/535.7 (KHTML, like Gecko) Comodo_Dragon/16.1.1.0 Chrome/16.0.912.63 Safari/535.7", + "expect" : + { + "name" : "Comodo Dragon", + "version" : "16.1.1.0", + "major" : "16" + } + }, + { + "desc" : "Conkeror", + "ua" : "Mozilla/5.0 (X11; Linux x86_64; rv:6.0.1) Gecko/20110831 conkeror/0.9.3", + "expect" : + { + "name" : "conkeror", + "version" : "0.9.3", + "major" : "0" + } + }, { "desc" : "Dillo", "ua" : "Dillo/2.2", @@ -419,6 +449,16 @@ "major" : "1" } }, + { + "desc" : "DuckDuckGo", + "ua" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1 Safari/605.1.1517.4.1 Ddg/17.4.1", + "expect" : + { + "name" : "DuckDuckGo", + "version" : "17.4.1", + "major" : "17" + } + }, { "desc" : "DuckDuckGo", "ua" : "Mozilla/5.0 (Linux; Android 8.1.0) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile DuckDuckGo/5 Safari/537.36", @@ -449,6 +489,16 @@ "major" : "5" } }, + { + "desc" : "Go Browser", + "ua" : "NokiaE66/GoBrowser/2.0.297", + "expect" : + { + "name" : "GoBrowser", + "version" : "2.0.297", + "major" : "2" + } + }, { "desc" : "Waterfox", "ua" : "Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.2.2 Waterfox/55.2.2", @@ -708,6 +758,16 @@ "major" : "2" } }, + { + "desc" : "ICEBrowser", + "ua" : "Mozilla/5.0 (Java 1.6.0_01; Windows XP 5.1 x86; en) ICEbrowser/v6_1_2", + "expect" : + { + "name" : "ICEbrowser", + "version" : "6.1.2", + "major" : "6" + } + }, { "desc" : "IceCat", "ua" : "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092921 IceCat/3.0.3-g1", @@ -768,6 +828,26 @@ "major" : "11" } }, + { + "desc" : "Iron", + "ua" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1250.0 Iron/22.0.2150.0 Safari/537.4", + "expect" : + { + "name" : "Iron", + "version" : "22.0.2150.0", + "major" : "22" + } + }, + { + "desc" : "Jasmine", + "ua" : "SAMSUNG-S8000/S8000XXIF3 SHP/VPP/R5 Jasmine/1.0 Nextreaming SMM-MMS/1.2.0 profile/MIDP-2.1 configuration/CLDC-1.1", + "expect" : + { + "name" : "Jasmine", + "version" : "1.0", + "major" : "1" + } + }, { "desc" : "K-Meleon", "ua" : "Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.5) Gecko/20031016 K-Meleon/0.8.2", @@ -788,6 +868,16 @@ "major" : "2" } }, + { + "desc" : "Klar < 4.1", + "ua" : "Mozilla/5.0 (Linux; Android 7.0) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Klar/1.0 Chrome/58.0.3029.83 Mobile Safari/537.36", + "expect" : + { + "name" : "Klar", + "version" : "1.0", + "major" : "1" + } + }, { "desc" : "Konqueror", "ua" : "Mozilla/5.0 (compatible; Konqueror/3.5; Linux; X11; x86_64) KHTML/3.5.6 (like Gecko) (Kubuntu)", @@ -808,6 +898,16 @@ "major" : "5" } }, + { + "desc" : "Rekonq", + "ua" : "Mozilla/5.0 (X11; U; Linux x86_64; cs-CZ) AppleWebKit/533.3 (KHTML, like Gecko) rekonq Safari/533.3", + "expect" : + { + "name" : "rekonq", + "version" : "undefined", + "major" : "undefined" + } + }, { "desc" : "Smart Lenovo Browser", "ua" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.10171 SLBChan/8", @@ -1008,6 +1108,26 @@ "major" : "6" } }, + { + "desc" : "NetSurf in Plan9", + "ua" : "Mozilla/5.0 (Plan9) NetSurf/3.12", + "expect" : + { + "name" : "NetSurf", + "version" : "3.12", + "major" : "3" + } + }, + { + "desc" : "NetSurf in Linux", + "ua" : "NetSurf/3.10 (Linux; Arch Linux)", + "expect" : + { + "name" : "NetSurf", + "version" : "3.10", + "major" : "3" + } + }, { "desc" : "Nokia Browser", "ua" : "Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaN8-00/025.007; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.37 Mobile Safari/533.4 3gpp-gba", @@ -1188,6 +1308,16 @@ "major" : "1" } }, + { + "desc" : "OviBrowser", + "ua" : "Mozilla/5.0 (Series40; NokiaX3-02/le6.32; Profile/MIDP-2.1 Configuration/CLDC-1.1) Gecko/20100401 S40OviBrowser/1.0.0.11.8", + "expect" : + { + "name" : "OviBrowser", + "version" : "1.0.0.11.8", + "major" : "1" + } + }, { "desc" : "PhantomJS", "ua" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.2 Safari/534.34", @@ -1219,7 +1349,7 @@ } }, { - "desc" : "QQ", + "desc" : "QQBrowser", "ua" : "Mozilla/5.0 (Linux; U; Android 4.4.4; zh-cn; OPPO R7s Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.1 Mobile Safari/537.36", "expect" : { @@ -1228,6 +1358,26 @@ "major" : "7" } }, + { + "desc" : "QQBrowser", + "ua" : "Mozilla/5.0 (Linux; U; Android 9; zh-cn; vivo X21 Build/PKQ1.180819.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/9.9 Mobile Safari/537.36", + "expect" : + { + "name" : "QQBrowser", + "version" : "9.9", + "major" : "9" + } + }, + { + "desc" : "Quark", + "ua" : "Mozilla/5.0 (Linux; U; Android 12; zh-Hans-CN; JLH-AN00 Build/HONORJLH-AN00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Quark/5.8.2.221 Mobile Safari/537.36", + "expect" : + { + "name" : "Quark", + "version" : "5.8.2.221", + "major" : "5" + } + }, { "desc" : "QupZilla", "ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) QupZilla/1.8.9 Safari/538.1", @@ -1238,6 +1388,16 @@ "major" : "1" } }, + { + "desc" : "Rekonq 2", + "ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) rekonq/2.2.1 Safari/537.21", + "expect" : + { + "name" : "rekonq", + "version" : "2.2.1", + "major" : "2" + } + }, { "desc" : "RockMelt", "ua" : "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) RockMelt/0.8.36.78 Chrome/7.0.517.44 Safari/534.7", @@ -1357,6 +1517,37 @@ "version" : "2.0", "major" : "2" } + }, + { + "desc" : "Sleipnir", + "ua" : "Mozilla/5.0 (Linux; Android 10; SOV37 Build/52.1.C.0.220; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/123.0.6312.120 Mobile Safari/537.36 Sleipnir/3.7.5", + "expect" : + { + "name" : "Sleipnir", + "version" : "3.7.5", + "major" : "3" + } + }, + + { + "desc" : "Sleipnir", + "ua" : "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Sleipnir 2.8.4)", + "expect" : + { + "name" : "Sleipnir", + "version" : "2.8.4", + "major" : "2" + } + }, + { + "desc" : "Sleipnir", + "ua" : "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022) Sleipnir/2.8.4", + "expect" : + { + "name" : "Sleipnir", + "version" : "2.8.4", + "major" : "2" + } }, { "desc" : "SlimBrowser", @@ -1469,7 +1660,7 @@ } }, { - "desc" : "UPBrowser", + "desc" : "UP.Browser", "ua" : "BenQ-CF61/1.00/WAP2.0/MIDP2.0/CLDC1.0 UP.Browser/6.3.0.4.c.1.102 (GUI) MMP/2.0", "expect" : { @@ -1539,13 +1730,13 @@ } }, { - "desc" : "Viera", - "ua" : "HbbTV/1.2.1 (;Panasonic;VIERA 2015;3.014;a001-003 4000-0000;)", + "desc" : "w3m", + "ua" : "w3m/0.5.1", "expect" : { - "name" : "VIERA", - "version" : "undefined", - "major" : "undefined" + "name" : "w3m", + "version" : "0.5.1", + "major" : "0" } }, { @@ -1753,7 +1944,7 @@ "ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14A456 QQ/6.5.3.410 V1_IPH_SQ_6.5.3_1_APP_A Pixel/1080 Core/UIWebView NetType/WIFI Mem/26", "expect" : { - "name" : "QQ", + "name" : "QQBrowser", "version" : "6.5.3.410", "major" : "6" } @@ -1763,7 +1954,7 @@ "ua" : "Mozilla/5.0 (Linux; Android 6.0; PRO 6 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.8 TBS/036824 Safari/537.36 V1_AND_SQ_6.5.8_422_YYB_D PA QQ/6.5.8.2910 NetType/WIFI WebP/0.3.0 Pixel/1080", "expect" : { - "name" : "QQ", + "name" : "QQBrowser", "version" : "6.5.8.2910", "major" : "6" } @@ -1904,6 +2095,46 @@ "name" : "LinkedIn" } }, + { + "desc" : "Links in Linux", + "ua" : "Links (2.xpre7; Linux 2.4.18 i586; x)", + "expect" : + { + "name" : "Links", + "version" : "2.xpre7", + "major" : "2" + } + }, + { + "desc" : "Links in Mac", + "ua" : "Links (2.1pre33; Darwin 8.11.0 Power Macintosh; 169x55)", + "expect" : + { + "name" : "Links", + "version" : "2.1pre33", + "major" : "2" + } + }, + { + "desc" : "Links in NetBSD", + "ua" : "Links (2.29; NetBSD 10.0 i386; GNU C 10.5; x)", + "expect" : + { + "name" : "Links", + "version" : "2.29", + "major" : "2" + } + }, + { + "desc" : "Links in FreeBSD", + "ua" : "Links (2.1pre15; FreeBSD 5.3-RELEASE i386; 196x84)", + "expect" : + { + "name" : "Links", + "version" : "2.1pre15", + "major" : "2" + } + }, { "desc" : "Safari including comma in minor version number", "ua" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.6,2 Safari/605.1.15", @@ -2071,5 +2302,25 @@ "version" : "12.33.0.36", "major" : "12" } + }, + { + "desc" : "Twitter", + "ua" : "Mozilla/5.0 (Linux; Android 13; CPH2531 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/123.0.6312.120 Mobile Safari/537.36 TwitterAndroid", + "expect" : + { + "name" : "Twitter", + "version" : "undefined", + "major" : "undefined" + } + }, + { + "desc" : "Twitter", + "ua" : "Mozilla/5.0 (iPad; CPU OS 15_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/19H12 Twitter for iPhone/10.34", + "expect" : + { + "name" : "Twitter", + "version" : "10.34", + "major" : "10" + } } ] \ No newline at end of file diff --git a/test/specs/device-all.json b/test/specs/device-all.json index fbaf6e942..3927c2aa9 100644 --- a/test/specs/device-all.json +++ b/test/specs/device-all.json @@ -1511,6 +1511,15 @@ "type": "mobile" } }, + { + "desc": "OPPO Pad", + "ua": "Mozilla/5.0 (Linux; U; Android 13; zh-CN; OPD2101 Build/TP1A.220905.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.58 UCBrowser/16.3.9.1290 Mobile Safari/537.36", + "expect": { + "vendor": "OPPO", + "model": "OPD2101", + "type": "tablet" + } + }, { "desc": "OPPO Neo", "ua": "Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; R831T Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 OppoBrowser/3.3.2 Mobile Safari/534.30",