annotate johndyer-mediaelement-13fa20a/src/js/me-plugindetector.js @ 25:4a4bd554b4c1 tip

Closing this sub branch.
author Daniele Barchiesi <daniele.barchiesi@eecs.qmul.ac.uk>
date Mon, 25 Mar 2013 14:02:54 +0000
parents 032bc65ebafc
children
rev   line source
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 */