1 | // Flash Player Version Detection - Rev 1.6
|
---|
2 | // Detect Client Browser type
|
---|
3 | // Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
|
---|
4 | var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
|
---|
5 | var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
|
---|
6 | var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
|
---|
7 |
|
---|
8 | function ControlVersion()
|
---|
9 | {
|
---|
10 | var version;
|
---|
11 | var axo;
|
---|
12 | var e;
|
---|
13 |
|
---|
14 | // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
|
---|
15 |
|
---|
16 | try {
|
---|
17 | // version will be set for 7.X or greater players
|
---|
18 | axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
|
---|
19 | version = axo.GetVariable("$version");
|
---|
20 | } catch (e) {
|
---|
21 | }
|
---|
22 |
|
---|
23 | if (!version)
|
---|
24 | {
|
---|
25 | try {
|
---|
26 | // version will be set for 6.X players only
|
---|
27 | axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
|
---|
28 |
|
---|
29 | // installed player is some revision of 6.0
|
---|
30 | // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
|
---|
31 | // so we have to be careful.
|
---|
32 |
|
---|
33 | // default to the first public version
|
---|
34 | version = "WIN 6,0,21,0";
|
---|
35 |
|
---|
36 | // throws if AllowScripAccess does not exist (introduced in 6.0r47)
|
---|
37 | axo.AllowScriptAccess = "always";
|
---|
38 |
|
---|
39 | // safe to call for 6.0r47 or greater
|
---|
40 | version = axo.GetVariable("$version");
|
---|
41 |
|
---|
42 | } catch (e) {
|
---|
43 | }
|
---|
44 | }
|
---|
45 |
|
---|
46 | if (!version)
|
---|
47 | {
|
---|
48 | try {
|
---|
49 | // version will be set for 4.X or 5.X player
|
---|
50 | axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
|
---|
51 | version = axo.GetVariable("$version");
|
---|
52 | } catch (e) {
|
---|
53 | }
|
---|
54 | }
|
---|
55 |
|
---|
56 | if (!version)
|
---|
57 | {
|
---|
58 | try {
|
---|
59 | // version will be set for 3.X player
|
---|
60 | axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
|
---|
61 | version = "WIN 3,0,18,0";
|
---|
62 | } catch (e) {
|
---|
63 | }
|
---|
64 | }
|
---|
65 |
|
---|
66 | if (!version)
|
---|
67 | {
|
---|
68 | try {
|
---|
69 | // version will be set for 2.X player
|
---|
70 | axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
|
---|
71 | version = "WIN 2,0,0,11";
|
---|
72 | } catch (e) {
|
---|
73 | version = -1;
|
---|
74 | }
|
---|
75 | }
|
---|
76 |
|
---|
77 | return version;
|
---|
78 | }
|
---|
79 |
|
---|
80 | // JavaScript helper required to detect Flash Player PlugIn version information
|
---|
81 | function GetSwfVer(){
|
---|
82 | // NS/Opera version >= 3 check for Flash plugin in plugin array
|
---|
83 | var flashVer = -1;
|
---|
84 |
|
---|
85 | if (navigator.plugins != null && navigator.plugins.length > 0) {
|
---|
86 | if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
|
---|
87 | var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
|
---|
88 | var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
|
---|
89 | var descArray = flashDescription.split(" ");
|
---|
90 | var tempArrayMajor = descArray[2].split(".");
|
---|
91 | var versionMajor = tempArrayMajor[0];
|
---|
92 | var versionMinor = tempArrayMajor[1];
|
---|
93 | var versionRevision = descArray[3];
|
---|
94 | if (versionRevision == "") {
|
---|
95 | versionRevision = descArray[4];
|
---|
96 | }
|
---|
97 | if (versionRevision[0] == "d") {
|
---|
98 | versionRevision = versionRevision.substring(1);
|
---|
99 | } else if (versionRevision[0] == "r") {
|
---|
100 | versionRevision = versionRevision.substring(1);
|
---|
101 | if (versionRevision.indexOf("d") > 0) {
|
---|
102 | versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
|
---|
103 | }
|
---|
104 | }
|
---|
105 | var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
|
---|
106 | }
|
---|
107 | }
|
---|
108 | // MSN/WebTV 2.6 supports Flash 4
|
---|
109 | else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
|
---|
110 | // WebTV 2.5 supports Flash 3
|
---|
111 | else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
|
---|
112 | // older WebTV supports Flash 2
|
---|
113 | else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
|
---|
114 | else if ( isIE && isWin && !isOpera ) {
|
---|
115 | flashVer = ControlVersion();
|
---|
116 | }
|
---|
117 | return flashVer;
|
---|
118 | }
|
---|
119 |
|
---|
120 | // When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
|
---|
121 | function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
|
---|
122 | {
|
---|
123 | versionStr = GetSwfVer();
|
---|
124 | if (versionStr == -1 ) {
|
---|
125 | return false;
|
---|
126 | } else if (versionStr != 0) {
|
---|
127 | if(isIE && isWin && !isOpera) {
|
---|
128 | // Given "WIN 2,0,0,11"
|
---|
129 | tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"]
|
---|
130 | tempString = tempArray[1]; // "2,0,0,11"
|
---|
131 | versionArray = tempString.split(","); // ['2', '0', '0', '11']
|
---|
132 | } else {
|
---|
133 | versionArray = versionStr.split(".");
|
---|
134 | }
|
---|
135 | var versionMajor = versionArray[0];
|
---|
136 | var versionMinor = versionArray[1];
|
---|
137 | var versionRevision = versionArray[2];
|
---|
138 |
|
---|
139 | // is the major.revision >= requested major.revision AND the minor version >= requested minor
|
---|
140 | if (versionMajor > parseFloat(reqMajorVer)) {
|
---|
141 | return true;
|
---|
142 | } else if (versionMajor == parseFloat(reqMajorVer)) {
|
---|
143 | if (versionMinor > parseFloat(reqMinorVer))
|
---|
144 | return true;
|
---|
145 | else if (versionMinor == parseFloat(reqMinorVer)) {
|
---|
146 | if (versionRevision >= parseFloat(reqRevision))
|
---|
147 | return true;
|
---|
148 | }
|
---|
149 | }
|
---|
150 | return false;
|
---|
151 | }
|
---|
152 | }
|
---|
153 |
|
---|
154 | function AC_AddExtension(src, ext)
|
---|
155 | {
|
---|
156 | if (src.indexOf('?') != -1)
|
---|
157 | return src.replace(/\?/, ext+'?');
|
---|
158 | else
|
---|
159 | return src + ext;
|
---|
160 | }
|
---|
161 |
|
---|
162 | function AC_Generateobj(objAttrs, params, embedAttrs)
|
---|
163 | {
|
---|
164 | var str = '';
|
---|
165 | if (isIE && isWin && !isOpera)
|
---|
166 | {
|
---|
167 | str += '<object ';
|
---|
168 | for (var i in objAttrs)
|
---|
169 | str += i + '="' + objAttrs[i] + '" ';
|
---|
170 | str += '>';
|
---|
171 | for (var i in params)
|
---|
172 | str += '<param name="' + i + '" value="' + params[i] + '" /> ';
|
---|
173 | str += '</object>';
|
---|
174 | } else {
|
---|
175 | str += '<embed ';
|
---|
176 | for (var i in embedAttrs)
|
---|
177 | str += i + '="' + embedAttrs[i] + '" ';
|
---|
178 | str += '> </embed>';
|
---|
179 | }
|
---|
180 |
|
---|
181 | document.write(str);
|
---|
182 | }
|
---|
183 |
|
---|
184 | function AC_FL_RunContent(){
|
---|
185 | var ret =
|
---|
186 | AC_GetArgs
|
---|
187 | ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
|
---|
188 | , "application/x-shockwave-flash"
|
---|
189 | );
|
---|
190 | AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
|
---|
191 | }
|
---|
192 |
|
---|
193 | function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
|
---|
194 | var ret = new Object();
|
---|
195 | ret.embedAttrs = new Object();
|
---|
196 | ret.params = new Object();
|
---|
197 | ret.objAttrs = new Object();
|
---|
198 | for (var i=0; i < args.length; i=i+2){
|
---|
199 | var currArg = args[i].toLowerCase();
|
---|
200 |
|
---|
201 | switch (currArg){
|
---|
202 | case "classid":
|
---|
203 | break;
|
---|
204 | case "pluginspage":
|
---|
205 | ret.embedAttrs[args[i]] = args[i+1];
|
---|
206 | break;
|
---|
207 | case "src":
|
---|
208 | case "movie":
|
---|
209 | args[i+1] = AC_AddExtension(args[i+1], ext);
|
---|
210 | ret.embedAttrs["src"] = args[i+1];
|
---|
211 | ret.params[srcParamName] = args[i+1];
|
---|
212 | break;
|
---|
213 | case "onafterupdate":
|
---|
214 | case "onbeforeupdate":
|
---|
215 | case "onblur":
|
---|
216 | case "oncellchange":
|
---|
217 | case "onclick":
|
---|
218 | case "ondblClick":
|
---|
219 | case "ondrag":
|
---|
220 | case "ondragend":
|
---|
221 | case "ondragenter":
|
---|
222 | case "ondragleave":
|
---|
223 | case "ondragover":
|
---|
224 | case "ondrop":
|
---|
225 | case "onfinish":
|
---|
226 | case "onfocus":
|
---|
227 | case "onhelp":
|
---|
228 | case "onmousedown":
|
---|
229 | case "onmouseup":
|
---|
230 | case "onmouseover":
|
---|
231 | case "onmousemove":
|
---|
232 | case "onmouseout":
|
---|
233 | case "onkeypress":
|
---|
234 | case "onkeydown":
|
---|
235 | case "onkeyup":
|
---|
236 | case "onload":
|
---|
237 | case "onlosecapture":
|
---|
238 | case "onpropertychange":
|
---|
239 | case "onreadystatechange":
|
---|
240 | case "onrowsdelete":
|
---|
241 | case "onrowenter":
|
---|
242 | case "onrowexit":
|
---|
243 | case "onrowsinserted":
|
---|
244 | case "onstart":
|
---|
245 | case "onscroll":
|
---|
246 | case "onbeforeeditfocus":
|
---|
247 | case "onactivate":
|
---|
248 | case "onbeforedeactivate":
|
---|
249 | case "ondeactivate":
|
---|
250 | case "type":
|
---|
251 | case "codebase":
|
---|
252 | ret.objAttrs[args[i]] = args[i+1];
|
---|
253 | break;
|
---|
254 | case "id":
|
---|
255 | case "width":
|
---|
256 | case "height":
|
---|
257 | case "align":
|
---|
258 | case "vspace":
|
---|
259 | case "hspace":
|
---|
260 | case "class":
|
---|
261 | case "title":
|
---|
262 | case "accesskey":
|
---|
263 | case "name":
|
---|
264 | case "tabindex":
|
---|
265 | ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
|
---|
266 | break;
|
---|
267 | default:
|
---|
268 | ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
|
---|
269 | }
|
---|
270 | }
|
---|
271 | ret.objAttrs["classid"] = classid;
|
---|
272 | if (mimeType) ret.embedAttrs["type"] = mimeType;
|
---|
273 | return ret;
|
---|
274 | }
|
---|
275 |
|
---|
276 |
|
---|