/src/flash/flash-ua.js
JavaScript | 115 lines | 46 code | 12 blank | 57 comment | 13 complexity | f11081e8875bec4fe93745292de7ddf5 MD5 | raw file
- /**
- * @module Flash UA ??
- * @author kingfo<oicuicu@gmail.com>
- */
- KISSY.add('flash-ua', function(S) {
- var UA = S.UA, fpv, fpvF, firstRun = true;
- /**
- * ?? Flash ???
- * ???? [M, S, R] ???????? undefined
- */
- function getFlashVersion() {
- var ver, SF = 'ShockwaveFlash';
- // for NPAPI see: http://en.wikipedia.org/wiki/NPAPI
- if (navigator.plugins && navigator.mimeTypes.length) {
- ver = (navigator.plugins['Shockwave Flash'] || 0).description;
- }
- // for ActiveX see: http://en.wikipedia.org/wiki/ActiveX
- else if (window.ActiveXObject) {
- try {
- ver = new ActiveXObject(SF + '.' + SF)['GetVariable']('$version');
- } catch(ex) {
- //S.log('getFlashVersion failed via ActiveXObject');
- // nothing to do, just return undefined
- }
- }
- // ???????????ver ? undefined
- if(!ver) return;
- // ????????ver ? "Shockwave Flash 10.1 r53" or "WIN 10,1,53,64"
- return arrify(ver);
- }
- /**
- * arrify("10.1.r53") => ["10", "1", "53"]
- */
- function arrify(ver) {
- return ver.match(/(\d)+/g).splice(0,3);
- }
- /**
- * ???????Major.????Minor(????3???3?)?????Revision(?????4??8???5?)
- * ver ??????????? 0
- * numerify("10.1 r53") => 10.00100053
- * numerify(["10", "1", "53"]) => 10.00100053
- * numerify(12.2) => 12.2
- */
- function numerify(ver) {
- var arr = S.isString(ver) ? arrify(ver) : ver, ret = ver;
- if (S.isArray(arr)) {
- ret = parseFloat(arr[0] + '.' + pad(arr[1], 3) + pad(arr[2], 5));
- }
- return ret || 0;
- }
- /**
- * pad(12, 5) => "00012"
- * ref: http://lifesinger.org/blog/2009/08/the-harm-of-tricky-code/
- */
- function pad(num, n) {
- var len = (num + '').length;
- while (len++ < n) {
- num = '0' + num;
- }
- return num;
- }
- /**
- * ???? [M, S, R] ???????? undefined
- * fpv ??? flash player version
- */
- UA.fpv = function(force) {
- // ?? new ActiveX ? try catch ? ?????????????????
- if(force || firstRun) {
- firstRun = false;
- fpv = getFlashVersion();
- fpvF = numerify(fpv);
- }
- return fpv;
- };
- /**
- * Checks fpv is greater than or equal the specific version.
- * ??? flash ???????????
- * @param ver eg. "10.1.53"
- * <code>
- * if(S.UA.fpvGEQ('9.9.2')) { ... }
- * </code>
- */
- UA.fpvGEQ = function(ver, force) {
- if(firstRun) UA.fpv(force);
- return !!fpvF && (fpvF >= numerify(ver));
- };
- }, { host: 'flash' });
- /**
- * NOTES:
- *
- - ActiveXObject JS ??
- - newObj = new ActiveXObject(ProgID:String[, location:String])
- - newObj ?? ???? ActiveXObject ???
- - ProgID ?? ??? "serverName.typeName" ????
- - serverName ?? ?????????????
- - typeName ?? ??????????
- - location ?? ??????????????
- - Google Chrome ?????
- - ??????? flashplay ?? ????? Flashplayer
- - ref: http://googlechromereleases.blogspot.com/2010/03/dev-channel-update_30.html
- *
- */