PageSourceSearch

https://delta-umwelt.com/libraries/gantry/js/browser-engines.js

js delta-umwelt.com collected 2026-10-07 10:06:38 UTC 3,600 bytes, 163 lines download raw bytes

1(function(){
2
3var document = this.document;
4var window = document.window = this;
5
6var ua = navigator.userAgent.toLowerCase(),
7	platform = navigator.platform.toLowerCase(),
8	UA = ua.match(/(opera|ie|trident|firefox|chrome|version)[\s\/:]([\w\d\.]+)?.*?(safari|version[\s\/:]([\w\d\.]+)|rv:(\d.?)|$)/) || [null, 'unknown', 0],
9	mode = (UA[1] == 'ie' || UA[1] == 'trident') && document.documentMode;
10
11var Browser = this.Browser = {
12
13	extend: Function.prototype.extend,
14
15	name: (UA[1] == 'version') ? UA[3] : (UA[1] == 'trident' ? 'ie' : UA[1]),
16
17	version: mode || parseFloat((UA[1] == 'opera' && UA[4]) ? UA[4] : ((UA[1] == 'trident' && UA[5]) ? UA[5] : UA[2])),
18
19	Platform: {
20		name: ua.match(/ip(?:ad|od|hone)/) ? 'ios' : (ua.match(/(?:webos|android)/) || platform.match(/mac|win|linux/) || ['other'])[0]
21	},
22
23	Features: {
24		xpath: !!(document.evaluate),
25		air: !!(window.runtime),
26		query: !!(document.querySelector),
27		json: !!(window.JSON)
28	},
29
30	Plugins: {}
31
32};
33
34Browser[Browser.name] = true;
35Browser[Browser.name + parseInt(Browser.version, 10)] = true;
36Browser.Platform[Browser.Platform.name] = true;
37
38// Request
39
40Browser.Request = (function(){
41
42	var XMLHTTP = function(){
43		return new XMLHttpRequest();
44	};
45
46	var MSXML2 = function(){
47		return new ActiveXObject('MSXML2.XMLHTTP');
48	};
49
50	var MSXML = function(){
51		return new ActiveXObject('Microsoft.XMLHTTP');
52	};
53
54	return Function.attempt(function(){
55		XMLHTTP();
56		return XMLHTTP;
57	}, function(){
58		MSXML2();
59		return MSXML2;
60	}, function(){
61		MSXML();
62		return MSXML;
63	});
64
65})();
66
67Browser.Features.xhr = !!(Browser.Request);
68
69//<1.4compat>
70
71// Flash detection
72
73var version = (Function.attempt(function(){
74	return navigator.plugins['Shockwave Flash'].description;
75}, function(){
76	return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');
77}) || '0 r0').match(/\d+/g);
78
79Browser.Plugins.Flash = {
80	version: Number(version[0] || '0.' + version[1]) || 0,
81	build: Number(version[2]) || 0
82};
83
84//</1.4compat>
85
86// String scripts
87
88Browser.exec = function(text){
89	if (!text) return text;
90	if (window.execScript){
91		window.execScript(text);
92	} else {
93		var script = document.createElement('script');
94		script.setAttribute('type', 'text/javascript');
95		script.text = text;
96		document.head.appendChild(script);
97		document.head.removeChild(script);
98	}
99	return text;
100};
101
102
103if (Browser.Platform.ios) Browser.Platform.ipod = true;
104
105Browser.Engine = {};
106
107var setEngine = function(name, version){
108	Browser.Engine.name = name;
109	Browser.Engine[name + version] = true;
110	Browser.Engine.version = version;
111};
112
113if (Browser.ie){
114	Browser.Engine.trident = true;
115
116	switch (Browser.version){
117		case 6: setEngine('trident', 4); break;
118		case 7: setEngine('trident', 5); break;
119		case 8: setEngine('trident', 6);
120	}
121}
122
123if (Browser.firefox){
124	Browser.Engine.gecko = true;
125
126	if (Browser.version >= 3) setEngine('gecko', 19);
127	else setEngine('gecko', 18);
128}
129
130if (Browser.safari || Browser.chrome){
131	Browser.Engine.webkit = true;
132
133	switch (Browser.version){
134		case 2: setEngine('webkit', 419); break;
135		case 3: setEngine('webkit', 420); break;
136		case 4: setEngine('webkit', 525);
137	}
138}
139
140if (Browser.opera){
141	Browser.Engine.presto = true;
142
143	if (Browser.version >= 9.6) setEngine('presto', 960);
144	else if (Browser.version >= 9.5) setEngine('presto', 950);
145	else setEngine('presto', 925);
146}
147
148if (Browser.name == 'unknown'){
149	switch ((ua.match(/(?:webkit|khtml|gecko)/) || [])[0]){
150		case 'webkit':
151		case 'khtml':
152			Browser.Engine.webkit = true;
153		break;
154		case 'gecko':
155			Browser.Engine.gecko = true;
156	}
157}
158
159this.$exec = Browser.exec;
160
161//</1.2compat>
162
163})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.