gyorgy@0
|
1
|
gyorgy@0
|
2 // Core detector, plugins are added below
|
gyorgy@0
|
3 mejs.PluginDetector = {
|
gyorgy@0
|
4
|
gyorgy@0
|
5 // main public function to test a plug version number PluginDetector.hasPluginVersion('flash',[9,0,125]);
|
gyorgy@0
|
6 hasPluginVersion: function(plugin, v) {
|
gyorgy@0
|
7 var pv = this.plugins[plugin];
|
gyorgy@0
|
8 v[1] = v[1] || 0;
|
gyorgy@0
|
9 v[2] = v[2] || 0;
|
gyorgy@0
|
10 return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
|
gyorgy@0
|
11 },
|
gyorgy@0
|
12
|
gyorgy@0
|
13 // cached values
|
gyorgy@0
|
14 nav: window.navigator,
|
gyorgy@0
|
15 ua: window.navigator.userAgent.toLowerCase(),
|
gyorgy@0
|
16
|
gyorgy@0
|
17 // stored version numbers
|
gyorgy@0
|
18 plugins: [],
|
gyorgy@0
|
19
|
gyorgy@0
|
20 // runs detectPlugin() and stores the version number
|
gyorgy@0
|
21 addPlugin: function(p, pluginName, mimeType, activeX, axDetect) {
|
gyorgy@0
|
22 this.plugins[p] = this.detectPlugin(pluginName, mimeType, activeX, axDetect);
|
gyorgy@0
|
23 },
|
gyorgy@0
|
24
|
gyorgy@0
|
25 // get the version number from the mimetype (all but IE) or ActiveX (IE)
|
gyorgy@0
|
26 detectPlugin: function(pluginName, mimeType, activeX, axDetect) {
|
gyorgy@0
|
27
|
gyorgy@0
|
28 var version = [0,0,0],
|
gyorgy@0
|
29 description,
|
gyorgy@0
|
30 i,
|
gyorgy@0
|
31 ax;
|
gyorgy@0
|
32
|
gyorgy@0
|
33 // Firefox, Webkit, Opera
|
gyorgy@0
|
34 if (typeof(this.nav.plugins) != 'undefined' && typeof this.nav.plugins[pluginName] == 'object') {
|
gyorgy@0
|
35 description = this.nav.plugins[pluginName].description;
|
gyorgy@0
|
36 if (description && !(typeof this.nav.mimeTypes != 'undefined' && this.nav.mimeTypes[mimeType] && !this.nav.mimeTypes[mimeType].enabledPlugin)) {
|
gyorgy@0
|
37 version = description.replace(pluginName, '').replace(/^\s+/,'').replace(/\sr/gi,'.').split('.');
|
gyorgy@0
|
38 for (i=0; i<version.length; i++) {
|
gyorgy@0
|
39 version[i] = parseInt(version[i].match(/\d+/), 10);
|
gyorgy@0
|
40 }
|
gyorgy@0
|
41 }
|
gyorgy@0
|
42 // Internet Explorer / ActiveX
|
gyorgy@0
|
43 } else if (typeof(window.ActiveXObject) != 'undefined') {
|
gyorgy@0
|
44 try {
|
gyorgy@0
|
45 ax = new ActiveXObject(activeX);
|
gyorgy@0
|
46 if (ax) {
|
gyorgy@0
|
47 version = axDetect(ax);
|
gyorgy@0
|
48 }
|
gyorgy@0
|
49 }
|
gyorgy@0
|
50 catch (e) { }
|
gyorgy@0
|
51 }
|
gyorgy@0
|
52 return version;
|
gyorgy@0
|
53 }
|
gyorgy@0
|
54 };
|
gyorgy@0
|
55
|
gyorgy@0
|
56 // Add Flash detection
|
gyorgy@0
|
57 mejs.PluginDetector.addPlugin('flash','Shockwave Flash','application/x-shockwave-flash','ShockwaveFlash.ShockwaveFlash', function(ax) {
|
gyorgy@0
|
58 // adapted from SWFObject
|
gyorgy@0
|
59 var version = [],
|
gyorgy@0
|
60 d = ax.GetVariable("$version");
|
gyorgy@0
|
61 if (d) {
|
gyorgy@0
|
62 d = d.split(" ")[1].split(",");
|
gyorgy@0
|
63 version = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
|
gyorgy@0
|
64 }
|
gyorgy@0
|
65 return version;
|
gyorgy@0
|
66 });
|
gyorgy@0
|
67
|
gyorgy@0
|
68 // Add Silverlight detection
|
gyorgy@0
|
69 mejs.PluginDetector.addPlugin('silverlight','Silverlight Plug-In','application/x-silverlight-2','AgControl.AgControl', function (ax) {
|
gyorgy@0
|
70 // Silverlight cannot report its version number to IE
|
gyorgy@0
|
71 // but it does have a isVersionSupported function, so we have to loop through it to get a version number.
|
gyorgy@0
|
72 // adapted from http://www.silverlightversion.com/
|
gyorgy@0
|
73 var v = [0,0,0,0],
|
gyorgy@0
|
74 loopMatch = function(ax, v, i, n) {
|
gyorgy@0
|
75 while(ax.isVersionSupported(v[0]+ "."+ v[1] + "." + v[2] + "." + v[3])){
|
gyorgy@0
|
76 v[i]+=n;
|
gyorgy@0
|
77 }
|
gyorgy@0
|
78 v[i] -= n;
|
gyorgy@0
|
79 };
|
gyorgy@0
|
80 loopMatch(ax, v, 0, 1);
|
gyorgy@0
|
81 loopMatch(ax, v, 1, 1);
|
gyorgy@0
|
82 loopMatch(ax, v, 2, 10000); // the third place in the version number is usually 5 digits (4.0.xxxxx)
|
gyorgy@0
|
83 loopMatch(ax, v, 2, 1000);
|
gyorgy@0
|
84 loopMatch(ax, v, 2, 100);
|
gyorgy@0
|
85 loopMatch(ax, v, 2, 10);
|
gyorgy@0
|
86 loopMatch(ax, v, 2, 1);
|
gyorgy@0
|
87 loopMatch(ax, v, 3, 1);
|
gyorgy@0
|
88
|
gyorgy@0
|
89 return v;
|
gyorgy@0
|
90 });
|
gyorgy@0
|
91 // add adobe acrobat
|
gyorgy@0
|
92 /*
|
gyorgy@0
|
93 PluginDetector.addPlugin('acrobat','Adobe Acrobat','application/pdf','AcroPDF.PDF', function (ax) {
|
gyorgy@0
|
94 var version = [],
|
gyorgy@0
|
95 d = ax.GetVersions().split(',')[0].split('=')[1].split('.');
|
gyorgy@0
|
96
|
gyorgy@0
|
97 if (d) {
|
gyorgy@0
|
98 version = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
|
gyorgy@0
|
99 }
|
gyorgy@0
|
100 return version;
|
gyorgy@0
|
101 });
|
gyorgy@0
|
102 */ |