// Copyright 2006 The Closure Library Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS-IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. /** * @fileoverview Flash detection. * @see ../demos/useragent.html */ goog.provide('goog.userAgent.flash'); goog.require('goog.string'); /** * @define {boolean} Whether we know at compile-time that the browser doesn't * have flash. */ goog.define('goog.userAgent.flash.ASSUME_NO_FLASH', false); /** * Whether we can detect that the browser has flash * @type {boolean} * @private */ goog.userAgent.flash.detectedFlash_ = false; /** * Full version information of flash installed, in form 7.0.61 * @type {string} * @private */ goog.userAgent.flash.detectedFlashVersion_ = ''; /** * Initializer for goog.userAgent.flash * * This is a named function so that it can be stripped via the jscompiler if * goog.userAgent.flash.ASSUME_NO_FLASH is true. * @private */ goog.userAgent.flash.init_ = function() { if (navigator.plugins && navigator.plugins.length) { var plugin = navigator.plugins['Shockwave Flash']; if (plugin) { goog.userAgent.flash.detectedFlash_ = true; if (plugin.description) { goog.userAgent.flash.detectedFlashVersion_ = goog.userAgent.flash.getVersion_(plugin.description); return; } } if (navigator.plugins['Shockwave Flash 2.0']) { goog.userAgent.flash.detectedFlash_ = true; goog.userAgent.flash.detectedFlashVersion_ = '2.0.0.11'; return; } } if (navigator.mimeTypes && navigator.mimeTypes.length) { var mimeType = navigator.mimeTypes['application/x-shockwave-flash']; goog.userAgent.flash.detectedFlash_ = !!(mimeType && mimeType.enabledPlugin); if (goog.userAgent.flash.detectedFlash_) { goog.userAgent.flash.detectedFlashVersion_ = goog.userAgent.flash.getVersion_(mimeType.enabledPlugin.description); return; } } try { // Try 7 first, since we know we can use GetVariable with it var ax = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.7'); goog.userAgent.flash.detectedFlash_ = true; goog.userAgent.flash.detectedFlashVersion_ = goog.userAgent.flash.getVersion_(ax.GetVariable('$version')); return; } catch (e) { /* Fall through */ } // Try 6 next, some versions are known to crash with GetVariable calls try { var ax = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.6'); goog.userAgent.flash.detectedFlash_ = true; // First public version of Flash 6 goog.userAgent.flash.detectedFlashVersion_ = '6.0.21'; return; } catch (e) { /* Fall through */ } try { // Try the default activeX var ax = new ActiveXObject('ShockwaveFlash.ShockwaveFlash'); goog.userAgent.flash.detectedFlash_ = true; goog.userAgent.flash.detectedFlashVersion_ = goog.userAgent.flash.getVersion_(ax.GetVariable('$version')); return; } catch (e) { // No flash } }; /** * Derived from Apple's suggested sniffer. * @param {string} desc e.g. Shockwave Flash 7.0 r61. * @return {string} 7.0.61. * @private */ goog.userAgent.flash.getVersion_ = function(desc) { var matches = desc.match(/[\d]+/g); if (!matches) { return ''; } matches.length = 3; // To standardize IE vs FF return matches.join('.'); }; if (!goog.userAgent.flash.ASSUME_NO_FLASH) { goog.userAgent.flash.init_(); } /** * Whether we can detect that the browser has flash * @type {boolean} */ goog.userAgent.flash.HAS_FLASH = goog.userAgent.flash.detectedFlash_; /** * Full version information of flash installed, in form 7.0.61 * @type {string} */ goog.userAgent.flash.VERSION = goog.userAgent.flash.detectedFlashVersion_; /** * Whether the installed flash version is as new or newer than a given version. * @param {string} version The version to check. * @return {boolean} Whether the installed flash version is as new or newer * than a given version. */ goog.userAgent.flash.isVersion = function(version) { return goog.string.compareVersions(goog.userAgent.flash.VERSION, version) >= 0; };