@qooxdoo/framework
Version:
The JS Framework for Coders
223 lines (187 loc) • 6.16 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2004-2008 1&1 Internet AG, Germany, http://www.1und1.de
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
Authors:
* Sebastian Werner (wpbasti)
* Martin Wittemann (martinwittemann)
======================================================================
This class contains code based on the following work:
* SWFFix
http://www.swffix.org
Version 0.3 (r17)
Copyright:
(c) 2007 SWFFix developers
License:
MIT: http://www.opensource.org/licenses/mit-license.php
Authors:
* Geoff Stearns
* Michael Williams
* Bobby van der Sluis
************************************************************************ */
/**
* This class contains all Flash detection.
*
* It is used by {@link qx.core.Environment} and should not be used
* directly. Please check its class comment for details how to use it.
*
* @require(qx.bom.client.OperatingSystem)
* @internal
*/
qx.Bootstrap.define("qx.bom.client.Flash",
{
/*
*****************************************************************************
STATICS
*****************************************************************************
*/
statics :
{
/**
* Checks if the flash plugin is available.
* @return {Boolean} <code>true</code>, if flash is available.
* @internal
*/
isAvailable : function() {
return parseFloat(qx.bom.client.Flash.getVersion()) > 0;
},
/**
* Checks for the version of flash and returns it as a string. If the
* version could not be detected, an empty string will be returned.
*
* @return {String} The version number as string.
* @internal
*/
getVersion : function()
{
if (navigator.plugins && typeof navigator.plugins["Shockwave Flash"] === "object") {
var full = [0,0,0];
var desc = navigator.plugins["Shockwave Flash"].description;
if (typeof desc != "undefined")
{
desc = desc.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
full[0] = parseInt(desc.replace(/^(.*)\..*$/, "$1"), 10);
full[1] = parseInt(desc.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
full[2] = /r/.test(desc) ? parseInt(desc.replace(/^.*r(.*)$/, "$1"), 10) : 0;
}
return full.join(".");
}
else if (window.ActiveXObject) {
var full = [0,0,0];
var fp6Crash = false;
try {
var obj = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
}
catch(ex)
{
try
{
var obj = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
full = [ 6, 0, 21 ];
obj.AllowScriptAccess = "always";
}
catch(ex1)
{
if (full[0] == 6) {
fp6Crash = true;
}
}
if (!fp6Crash)
{
try {
obj = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
} catch(ex1) {}
}
}
if (!fp6Crash && typeof obj == "object")
{
var info = obj.GetVariable("$version");
if (typeof info != "undefined")
{
info = info.split(" ")[1].split(",");
full[0] = parseInt(info[0], 10);
full[1] = parseInt(info[1], 10);
full[2] = parseInt(info[2], 10);
}
}
return full.join(".");
}
else {
return "";
}
},
/**
* Checks if the flash installation is an express installation.
*
* @return {Boolean} <code>true</code>, if its an express installation.
* @internal
*/
getExpressInstall : function() {
var availableVersion = qx.bom.client.Flash.getVersion();
if (availableVersion == "") {
return false;
}
var os = qx.bom.client.OperatingSystem.getName();
return (os == "win" || os == "osx") &&
qx.bom.client.Flash.__supportsVersion("6.0.65", availableVersion);
},
/**
* Checks if a strict security model is available.
*
* @return {Boolean} <code>true</code>, if its available.
* @internal
*/
getStrictSecurityModel : function() {
var version = qx.bom.client.Flash.getVersion();
if (version == "") {
return false;
}
var full = version.split(".");
if (full[0] < 10) {
return qx.bom.client.Flash.__supportsVersion("9.0.151", version);
} else {
return qx.bom.client.Flash.__supportsVersion("10.0.12", version);
}
},
/**
* Storage for supported Flash versions.
*
* @internal
*/
_cachedSupportsVersion : {},
/**
* Check if the first given version is supported by either the current
* version available on the system or the optional given second parameter.
*
* @param input {String} The version to check.
* @param availableVersion {String} The version available on the current
* system.
* @return {Boolean} <code>true</code>, if the version is supported.
*/
__supportsVersion : function(input, availableVersion) {
var splitInput = input.split(".");
var system = availableVersion || qx.bom.client.Flash.getVersion();
system = system.split(".");
for (var i=0; i<splitInput.length; i++)
{
var diff = parseInt(system[i], 10) - parseInt(splitInput[i], 10);
if (diff > 0) {
return true;
} else if (diff < 0) {
return false;
}
}
return true;
}
},
defer : function(statics) {
qx.core.Environment.add("plugin.flash", statics.isAvailable);
qx.core.Environment.add("plugin.flash.version", statics.getVersion);
qx.core.Environment.add("plugin.flash.express", statics.getExpressInstall);
qx.core.Environment.add("plugin.flash.strictsecurity", statics.getStrictSecurityModel);
}
});